WPF外部程序集名称空间

时间:2012-11-13 19:27:56

标签: .net wpf assemblies

我想知道如何在XAML中引用第三方项目的程序集。

有时候我会看到

xmlns:xctk="http://schemas.xceed.com/wpf/xaml/toolkit"

有时候我会看到

xmlns:tn="clr-namespace:WPFTaskbarNotifier;assembly=WPFTaskbarNotifier"

URL样式和clr-namespace样式之间的区别是什么?每个样式的使用时间是什么?

2 个答案:

答案 0 :(得分:4)

XAML加载程序必须知道XAML树中的元素引用了哪些程序集。它使用XML命名空间来查找此值。

clr-namespace样式命名空间的特殊格式是XAML加载程序可以定位程序集并加载其中定义的类型。您可以使用此命名空间格式引用任何程序集。在同一个程序集中引用类型时,必须使用此格式。

URL样式是更传统的XML命名空间样式。 URL为supposed to point to a location where you can get information about the namespace,例如XSD架构等。但通常情况下,它们只是404'd。您可以允许引用程序集中类型的调用者使用XmlnsDefinitionAttribute来定义命名空间。

只需在AssemblyInfo.cs文件中删除每个命名空间段一个:

[assembly: XmlnsDefinition("http://www.Herp.com/2012/", "Herp")]
[assembly: XmlnsDefinition("http://www.Herp.com/2012/", "Herp.Derp")]

答案 1 :(得分:2)

两者之间没有区别;他们都指向同一个集会。

WPF允许开发人员使用程序集级别的XmlnsDefinition属性注册自定义命名空间。然后,这些名称空间可用于引用已编译程序集的其他项目。您还可以使用此属性将多个CLR命名空间合并在一起(WPF本身也这样做),这可以简化生成的XAML,并隐藏XAML设计器的内部项目结构。

但是,除了它们的外观差异之外,两个命名空间字符串意味着相同的东西,并且可以互换使用。这里唯一的限制是你不能在定义它们的程序集中使用这些自定义命名空间;它们是添加到最终程序集的元数据的一部分,在此之前不可用于编译器。