0

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

有时我看到

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

有时我看到

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

URL样式和样式之间有什么区别clr-namespace以及何时使用?

4

2 回答 2

5

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

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

URL样式是一种更传统的 XML 命名空间样式。URL应该指向一个位置,您可以在其中获取有关命名空间的信息,例如 XSD 模式等。但通常它们只是 404'd。您可以通过使用XmlnsDefinitionAttribute定义来允许引用程序集中类型的调用者使用这种命名空间样式。

只需在您的 AssemblyInfo.cs 文件中为每个命名空间段放置一个:

[assembly: XmlnsDefinition("http://www.Herp.com/2012/", "Herp")]
[assembly: XmlnsDefinition("http://www.Herp.com/2012/", "Herp.Derp")]
于 2012-11-13T19:42:05.747 回答
2

两者没有区别;他们都指向同一个程序集。

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

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

于 2012-11-13T19:38:01.663 回答