在WPF中架构名称空间和程序集引用之间有什么区别?

时间:2008-10-07 17:52:09

标签: wpf

为什么xaml中有两种引用。

一个看起来像这样:

xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 

但是我看起来像这样:

xmlns:WPFToolKit="clr-namespace:Microsoft.Windows.Controls;assembly=WPFToolkit"

为什么我不能这样做:

xmlns:local="http://myschema.mydomain.com/MyControlNamespace

感谢ixlettervariables的回答。以下是详细解释here

2 个答案:

答案 0 :(得分:7)

第二个实例基本上是对程序集中命名空间的未映射但显式的引用。第一个实例是对项目引用的某个程序集中的命名空间的映射引用。 XAML Namespaces and Namespace Mapping,在MSDN上更详细地解释了这一点:

  

WPF定义了XAML处理器使用的CLR属性,以便将多个CLR命名空间映射到单个XML命名空间。此属性XmlnsDefinitionAttribute放置在生成程序集的源代码中的程序集级别。 WPF程序集源代码使用此属性将各种常见名称空间(如System.Windows和System.Windows.Controls)映射到http://schemas.microsoft.com/winfx/2006/xaml/presentation名称空间。

因此,通过将以下内容添加到程序集中,您可以这样做:

[assembly:XmlnsDefinition("http://myschema.mydomain.com/MyControlNamespace", "My.Control.Namespace")]

答案 1 :(得分:0)

模式引用用于标准XAML元素,编译器知道如何直接映射到内置WPF类。

CLR命名空间引用是编译器的提示,在将命名空间命名空间中的XML元素映射到CLR / WPF类时,可以查找这些命令和命名空间。