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

48

什么是xmlns

当我们创建WPF项目时,在XAML文件中,它在起到什么作用?

5个回答

58

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种名称解析:

  1. StackPanel - 它是一个未经修饰的名字,将在默认命名空间WPF中解析。
  2. x:Name - 名称带有前缀x,会在XAML文档内进行解析。

24

在 XAML 中,您可以使用 xmlns 来获取对自己命名空间的引用。创建新的 WPF 项目时,我通常会首先添加对项目命名空间的引用:

xmlns:local="clr-namespace:MyWpfProject"

现在,我可以通过使用“local:”前缀来访问我在项目中创建的任何类(例如IValueConverters和DataTemplateSelectors)。

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

当然,您不必使用“local”,您可以使用任何您想要的名称。而且您可以以同样的方式添加对任何其他命名空间的引用。


12

通过将 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命名空间中具有相同名称的类。


6

MSDN中提取,根元素还包含属性xmlns和xmlns:x。这些属性指示XAML处理器哪些XML命名空间包含标记引用的元素定义。 xmlns属性特别指示默认XML命名空间。

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

希望这有所帮助。


-1

通过直观类比解释

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中的自定义控件,这将非常有用。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接