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

Mic*_*cah 5 wpf

为什么xaml中有两种引用.

一个看起来像这样:

xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
Run Code Online (Sandbox Code Playgroud)

但是我看起来像这样:

xmlns:WPFToolKit="clr-namespace:Microsoft.Windows.Controls;assembly=WPFToolkit"
Run Code Online (Sandbox Code Playgroud)

为什么我不能这样做:

xmlns:local="http://myschema.mydomain.com/MyControlNamespace
Run Code Online (Sandbox Code Playgroud)

感谢ixlettervariables的答案.下面是详细的解释在这里

use*_*116 7

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

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")]
Run Code Online (Sandbox Code Playgroud)