Jar*_*Par 53
xmlns是一个XML,不一定是XAML,它定义了一个名称空间,用于解析xml元素名称.因为它是在没有限定符的情况下定义的,所以它定义了应该解析XML元素名称的默认名称空间.
在XAML中,您通常会看到以下条目.它将默认命名空间定义为WPF,因此所有XML元素名称都被解析为WPF元素.
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
Run Code Online (Sandbox Code Playgroud)
查看非默认名称空间也很常见,如下所示.
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Run Code Online (Sandbox Code Playgroud)
这为XAML特定元素定义了限定名称空间.如果要在此命名空间中解析元素或属性名称,则应使用x对其进行限定.例如
<StackPanel x:Name="foo" />
Run Code Online (Sandbox Code Playgroud)
此定义中有2个名称解析.
Joe*_*ran 22
并且您还使用xmlns在XAML中获取对您自己的命名空间的引用.我在创建新WPF项目时要做的第一件事就是添加对项目命名空间的引用:
xmlns:local="clr-namespace:MyWpfProject"
Run Code Online (Sandbox Code Playgroud)
现在我可以使用"local:"前缀访问我在项目中创建的任何类(如IValueConverters和DataTemplateSelectors)
<local:BooleanToColorConverter x:Key="booleanToColorConverter" DefaultBrush="Green" HighlightBrush="Red" />
Run Code Online (Sandbox Code Playgroud)
当然,您不必使用"本地",您可以随意命名.您可以以相同的方式添加对任何其他命名空间的引用.
Ant*_*ien 10
您还可以通过添加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")]
Run Code Online (Sandbox Code Playgroud)
此语法可以简化您的XAML,但请注意不要在合并在一起的CLR命名空间中具有相同名称的类.