2、XAML 命名空间和命名空间映射到用户自定义类

2、WPF 和 XAML 命名空间声明

在许多XAML文件 根标记中的命名空间声明内,您都会发现有两个 XML 命名空间声明
第一个声明将整个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 使用默认的 XML 命名空间,为 XAML 中需要的标记语法使用单独的映射前缀。按照约定,该前缀是 x:,此 x: 约定后面是项目模板代码示例此 SDK 中语言功能的文档

XAML 命名空间定义了许多常用功能,这些功能即使对于基本的 WPF 应用程序也是必需的。例如,若要通过分部类将任何代码隐藏加入 XAML 文件,您必须将该类命名为相关 XAML 文件的根元素中的 x:Class 属性。或者,在 XAML 页中定义的、您希望作为键控资源访问的任何元素应当对相关元素设置了 x:Key 属性。有关 XAML 的这些方面和其他方面的更多信息,请参见 XAML 概述或 XAML 语法术语

2.1 映射到自定义类和程序集

您可以在 xmlns 前缀声明中使用一系列标记将 XML 命名空间映射到程序集,这与将标准 WPF 和 XAML 命名空间映射到前缀类似。

语法使用下列可能的命名标记和值:

clr-namespace: 在包含要作为元素公开的公共类型的程序集中声明的公共语言运行时 (CLR) 命名空间

assembly= 是指包含部分或全部引用的 CLR 命名空间的程序集该值通常只是程序集的名称,而不是路径。该程序集的路径必须生成编译的 XAML 的项目文件中以项目引用的形式建立。另外,为了合并版本管理和强名称签名,该值也可以是 AssemblyName 定义的字符串。

请注意,分隔 clr-namespace 标记和其值的字符是冒号 (:),而分隔 assembly 标记和其值的字符是等号 (=)。这两个标记之间使用的字符是分号。另外,不要在声明中的任何位置包含任何空白。例如:

xmlns:custom="clr-namespace:SDKSample;assembly=SDKSampleLibrary"

2.1.1 映射到当前程序集

clr-namespace 可以在引用自定义类的应用程序代码所在的程序集中定义。如果引用的 clr-namespace 是在引用自定义类的应用程序代码所在的程序集中定义的,则可以省略 assembly。这种情况的等效语法是指定 assembly=,等号后不需要任何字符串标记。

如果自定义类是在同一程序集中定义的,则不能将其用作页的根元素。不需要映射分部类;如果您希望在 XAML 中将自定义类作为元素引用,只需要映射应用程序中页的非分部类。

2.1.2 以项目引用的形式建立程序集的路径

 

2.2 在程序集中将 CLR 命名空间映射为 XML 命名空间

WPF 定义一个 CLR 属性,XAML 处理器使用该属性来将多个 CLR 命名空间映射到单个 XML 命名空间。XmlnsDefinitionAttribute 属性 放置在 生成程序集的源代码中的 程序集级别。WPF 程序集源代码使用此属性将各种常见的命名空间(如 System.Windows 和 System.Windows.Controls)映射到 http://schemas.microsoft.com/winfx/2006/xaml/presentation 命名空间。

XmlnsDefinitionAttribute 采用两个参数:XML 命名空间名称CLR 命名空间名称。可以存在多个XmlnsDefinitionAttribute,这样便可以将多个 CLR 命名空间映射到同一 XML 命名空间。映射后,如果需要,还可以通过在分部类代码隐藏页中提供相应的 using 语句来引用这些命名空间的成员,而无需完全限定。有关更多详细信息,请参见 XmlnsDefinitionAttribute

 

原文:

https://msdn.microsoft.com/zh-cn/library/ms747086(v=vs.90).aspx

posted @ 2015-10-15 22:01  moiska  阅读(826)  评论(0编辑  收藏  举报