【问题标题】:What is xmlns in every WPF file?每个 WPF 文件中的 xmlns 是什么?
【发布时间】:2009-03-10 14:28:11
【问题描述】:

xmlns 是什么?

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

【问题讨论】:

    标签: wpf xml xaml


    【解决方案1】:

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

    xmlns:local="clr-namespace:MyWpfProject"
    

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

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

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

    【讨论】:

      【解决方案2】:

      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 文档中解析。

      【讨论】:

        【解决方案3】:

        您还可以通过将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 命名空间中包含同名的类。

        【讨论】:

          【解决方案4】:

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

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

          希望这会有所帮助。

          【讨论】:

            猜你喜欢
            • 2012-07-21
            • 2021-09-29
            • 2010-11-13
            • 2019-07-15
            • 2011-03-12
            • 2014-09-12
            • 1970-01-01
            • 2018-04-12
            • 1970-01-01
            相关资源
            最近更新 更多