什么是xmlns
?
当我们创建WPF项目时,在XAML文件中,它在起到什么作用?
xmlns是XML构造,不一定是XAML,在其中定义了一个命名空间,用于解析xml元素名称。由于它没有限定符,因此它定义了默认命名空间,通过该命名空间可以解析XML元素名称。
在XAML中,通常会看到以下条目。它将默认命名空间定义为基本上是WPF,并且所有XML元素名称都因此解析为WPF元素。
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
还经常看到非默认命名空间,例如以下内容。
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
这定义了一个用于XAML特定元素的合格命名空间。如果您希望元素或属性名称在此命名空间中得到解析,则应该使用x进行限定。例如:
<StackPanel x:Name="foo" />
这个定义中涉及到2种名称解析:
在 XAML 中,您可以使用 xmlns 来获取对自己命名空间的引用。创建新的 WPF 项目时,我通常会首先添加对项目命名空间的引用:
xmlns:local="clr-namespace:MyWpfProject"
现在,我可以通过使用“local:”前缀来访问我在项目中创建的任何类(例如IValueConverters和DataTemplateSelectors)。
<local:BooleanToColorConverter x:Key="booleanToColorConverter" DefaultBrush="Green" HighlightBrush="Red" />
当然,您不必使用“local”,您可以使用任何您想要的名称。而且您可以以同样的方式添加对任何其他命名空间的引用。
通过将 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规范一致。
希望这有所帮助。
xmlns
在 XAML 文件中扮演什么角色?
它与命名空间有关。
这可能通过一个类比来解释得最好:你是否曾经遇到过两个人在同一个群组/公司/圈子中有相同的名字的情况?
例如:我们公司里还有另一个叫"Ben"的人。
如果老板喊我们的名字,谁会回应呢?
为了解决这个冲突,老板分别称呼我们为"Ben K"和"Ben M",也就是现在有了一个“命名空间”。
命名空间在 WPF 中有点类似:
xmlns:k="http://koshy"
xmlns:m="http://mercury"
k
代表我,'m' 代表另一个本:<b:GetBackToWork/>
This would mean BenKoshy
<m:GetBackToWork/>
This would mean Ben Mercury
GetBackToWork
类将作为结果实例化,每个类来自不同的命名空间。如果您在引用另一个dll中的自定义控件,这将非常有用。