【发布时间】:2009-03-10 14:28:11
【问题描述】:
xmlns 是什么?
当我们创建 WPF 项目时,它在 XAML 文件中扮演什么角色?
【问题讨论】:
xmlns 是什么?
当我们创建 WPF 项目时,它在 XAML 文件中扮演什么角色?
【问题讨论】:
您还可以使用 xmlns 在您的 XAML 中获取对您自己的命名空间的引用。在创建新的 WPF 项目时,我做的第一件事就是添加对项目命名空间的引用:
xmlns:local="clr-namespace:MyWpfProject"
现在我可以使用“local:”前缀访问我可能在项目中创建的任何类(如 IValueConverters 和 DataTemplateSelectors)
<local:BooleanToColorConverter x:Key="booleanToColorConverter" DefaultBrush="Green" HighlightBrush="Red" />
当然,您不必使用“本地”,您可以随意命名。并且您可以以相同的方式添加对您需要的任何其他命名空间的引用。
【讨论】:
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 种名称解析。
【讨论】:
您还可以通过将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 规范一致。
希望这会有所帮助。
【讨论】: