本主题进一步解释每个可扩展应用程序标记语言 (XAML) 文件的根标记中存在的两个命名空间映射及其用途,同时还介绍如何生成类似的映射,以便使用在您自己的代码中和/或单独的程序集中定义的元素。
WPF 和 XAML 命名空间声明
在许多可扩展应用程序标记语言 (XAML) 文件的根标记中的命名空间声明内,您都可以看到两个 xmlns 声明。第一个声明将整个 Windows Presentation Foundation (WPF) 命名空间映射为默认命名空间:
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
第二个声明映射单独的可扩展应用程序标记语言 (XAML) 命名空间,通常将其映射为 x: 前缀。
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
这些声明之间的关系是:XAML 实际上是语言标准,而 WPF 是将 XAML 作为语言使用的一个实现。XAML 语言指定一些为了兼容而假定要实现的语言元素,每个元素都应当能通过针对 XAML 命名空间执行的 XAML 处理器实现进行访问。WPF 实现为其自己的 API 保留默认命名空间,为 XAML 中需要的标记语法使用单独的映射前缀。按照约定,该前缀是 x:,此 x: 约定后面是项目模板、示例代码和此 SDK 中语言功能的文档。XAML 命名空间定义了许多常用功能,这些功能即使对于基本的 WPF 应用程序也是必需的。例如,若要通过分部类将任何代码隐藏加入 XAML 文件,您必须将该类命名为相关 XAML 文件的根元素中的 x:Class 属性。或者,在 XAML 页中定义的、您希望作为键控资源访问的任何元素应当对相关元素设置了 x:Key 属性。
映射到自定义类和程序集
您可以在 xmlns 前缀声明中使用一系列标记将命名空间映射到程序集,这与将标准 WPF 和 XAML 命名空间映射到前缀类似。
语法使用下列可能的命名标记和值:
clr-namespace: 在包含要作为元素公开的公共类型的程序集中声明的公共语言运行库 (CLR) 命名空间。
assembly= 是指包含部分或全部引用的 CLR 命名空间的程序集。该值通常只是程序集的名称,而不是路径。该程序集的路径必须在生成编译的 XAML 的项目文件中以项目引用的形式建立。另外,为了合并版本管理和强名称签名,该值也可以是 AssemblyName 定义的字符串。
请注意,分隔 clr-namespace 标记和其值的字符是冒号 (:),而分隔 assembly 标记和其值的字符是等号 (=)。这两个标记之间使用的字符是分号。例如:
xmlns:custom="clr-namespace:SDKSample;assembly=SDKSampleLibrary"
映射到当前程序集
如果引用的 clr-namespace 是在引用自定义类的应用程序代码所在的程序集中定义的,则可以省略 assembly。这种情况的等效语法是指定 assembly=,等号后不需要任何字符串标记。
如果自定义类是在同一程序集中定义的,则不能将其用作页的根元素。不需要映射分部类;如果您希望在 XAML 中将自定义类作为元素引用,只需要映射应用程序中页的非分部类。
在程序集中将 CLR 命名空间映射为 XML 命名空间
WPF 定义一个 CLR 属性,XAML 处理器使用它来将多个 CLR 命名空间映射到单个 XML 命名空间。XmlnsDefinitionAttribute 属性放置在生成程序集的源代码中的程序集级别。WPF 程序集源代码使用此属性将各种常见的命名空间(如 System.Windows 和 System.Windows.Controls)映射到