2010-07-26 2 views
4

Supposons que je les attributs suivants sur mon assemblage:XmlnsDefinitionAttribute et types ambigus

[assembly: XmlnsDefinitionAttribute("urn:foo", "NS1")] 
[assembly: XmlnsDefinitionAttribute("urn:foo", "NS2")] 

Alors supposons que j'ai quelques classes dans cette assemblée:

namespace NS1 
{ 
    public class Class1 {} 
} 

namespace NS1 
{ 
    public class Class2 {} 
} 

namespace NS2 
{ 
    // Here's the duplicate class name. OK in C#, but ambiguous in XAML 
    public class Class1 {} 
} 

Alors supposons que mon XAML est comme ça:

<Window x:Class="Window1" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     xmlns:foo="urn:foo" 
     Title="MainWindow" Height="350" Width="525"> 
    <ListBox> 
     <foo:Class2 /> 
     <foo:Class1 /> <!-- XAML parser does not like this: Ambiguous type reference --> 
    </ListBox> 
</Window> 

Mettre de côté les problèmes de conception avec avoir deux classes ou plus nam est-il possible de fournir la spécificité nécessaire sans recourir à cela?

<Window x:Class="Window1" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     xmlns:foo="urn:foo" 
     xmlns:foo2="clr-namespace:NS2;assembly=AssemblyName" 
     Title="MainWindow" Height="350" Width="525"> 
    <ListBox> 
     <foo:Class2 /> 
     <foo2:Class1 /> 
    </ListBox> 
</Window> 

Dans une syntaxe XAML spéciale? Dans un attribut, je peux mettre NS2.Class1 (par exemple XamlClassName("NS2_Class1"))?

Répondre

1

Vous pouvez utiliser:

[assembly: XmlnsDefinitionAttribute("urn:foo", "NS1")] 
[assembly: XmlnsDefinitionAttribute("urn:foo", "NS2")] 
[assembly: XmlnsDefinitionAttribute("urn:foo2", "NS2")] 

puis:

xmlns:foo2="urn:foo2" 

et enfin:

<foo2:Class1 /> 

Cordialement,

H.Dolder

+0

J'apprécie la réponse, mais je veux spécifiquement éviter cela (voir ci-dessus). –

+0

Pour éviter cela (dans plusieurs de vos fichiers XAML): xmlns: foo2 = "espace de noms clr: NS2; assembly = AssemblyName" J'ai proposé ceci (dans l'assemblage): [assembly: XmlnsDefinitionAttribute ("urn: foo2 "," NS2 ")] Cordialement, H.Dolder –