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

时间:2009-03-10 14:28:12

标签: wpf xml xaml

什么是xmlns

创建WPF项目时,它在XAML文件中扮演什么角色?

4 个答案:

答案 0 :(得分:53)

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:名称 - 名称用x限定,将在XAML文档中解析。

答案 1 :(得分:22)

您也可以使用xmlns在XAML中获取对您自己的命名空间的引用。在创建新的WPF项目时,我要做的第一件事就是添加对项目命名空间的引用:

xmlns:local="clr-namespace:MyWpfProject"

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

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

当然,您不必使用“本地”,您可以随意命名。并且您可以以相同的方式添加对任何其他命名空间的引用。

答案 2 :(得分: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")]

此语法可以简化您的XAML,但请注意不要在合并的CLR命名空间中使用具有相同名称的类。

答案 3 :(得分:6)

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

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

希望这有帮助。