XmlnsDefinition属性和不明确的类型

时间:2010-07-26 21:59:26

标签: xaml

我们假设我的程序集具有以下属性:

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

然后让我们假设我在该程序集中有几个类:

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 {}
}

然后让我们假设我的XAML是这样的:

<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>

如果在程序集中有两个或多个类名相同的任何设计问题,是否有办法提供所需的特异性而不诉诸于此?

<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>

在一些特殊的XAML语法中?在一个属性中,我可以使用NS2.Class1(例如XamlClassName("NS2_Class1"))?

1 个答案:

答案 0 :(得分:1)

您可以使用:

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

然后:

xmlns:foo2="urn:foo2" 

最后:

<foo2:Class1 /> 

此致

H.Dolder