什么是每个WPF文件中的xmlns?

什么是xmlns

在创buildWPF项目时,它在XAML文件中起什么作用?

xmlns是一个XML,不一定是XAML,这个结构定义了一个用于parsingxml元素名称的名称空间。 因为它没有限定符定义,所以它定义了一个XML元素名称应该被parsing的默认名称空间。

在XAML中,您通常会看到以下条目。 它将默认名称空间定义为基本的WPF,所有的XML元素名称都被parsing为WPF元素。

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

查看非默认名称空间(如下所示)也很常见。

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

这为XAML特定元素定义了一个限定名称空间。 如果你想在这个命名空间内parsing一个元素或属性名称,你应该用x来限定它。 例如

 <StackPanel x:Name="foo" /> 

在这个定义中有2个名字parsing。

  1. StackPanel – 因为它是一个非限定名称,它将在WPF的默认名称空间中parsing
  2. x:名称 – 名称用x限定,将在XAML文档中parsing。

你也可以使用xmlns在你的XAML中获得对你自己的命名空间的引用。 我在创build一个新的WPF项目时做的第一件事就是添加对项目名称空间的引用:

 xmlns:local="clr-namespace:MyWpfProject" 

现在我可以使用“local:”前缀访问我可以在我的项目中创build的任何类(如IValueConverters和DataTemplateSelectors)

 <local:BooleanToColorConverter x:Key="booleanToColorConverter" DefaultBrush="Green" HighlightBrush="Red" /> 

当然,你不必使用“本地”,你可以任意命名。 你可以添加引用到任何其他命名空间,你需要以相同的方式。

您还可以通过将XmlnsDefinitionAttribute添加到您的程序XmlnsDefinitionAttribute ,将多个CLR名称空间映射到一个XML名称空间中。 这就是WPF团队所做的,通过映射System.Windows下的很多命名空间,如下所示:

 [XmlnsDefinitionAttribute( "http://schemas.microsoft.com/winfx/2006/xaml/presentation", "System.Windows.Controls")] [XmlnsDefinitionAttribute( "http://schemas.microsoft.com/winfx/2006/xaml/presentation", "System.Windows.Ink")] 

这个语法可以简化你的XAML,但是要注意不要在你合并在一起的CLR命名空间中有相同名字的类。

从MSDN获取根元素还包含属性xmlns和xmlns:x。 这些属性向XAML处理器指示哪些XML名称空间包含标记将引用的元素的元素定义。 xmlns属性专门指示默认的XML名称空间。

xmlns用于定义使用和映射的范围与XML 1.0规范一致。

希望这可以帮助。