2012-11-13 63 views
0

我想知道如何在XAML中引用第三方项目的程序集。WPF外部程序集名称空间

有时候我看到

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

,有时我看到

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

有什么URL风格和clr-namespace风格,当每一个使用之间的区别?

回答

3

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")] 
2

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

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

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

相关问题