[备忘]Silverlight 库的前缀和映射
本主题介绍默认 Silverlight XAML 名称空间的概念,并说明当您在 XAML 中定义基于 Silverlight 的应用程序的各个部分时,为何可能需要为附加的 XAML 命名空间创建映射。
本主题包括下列各节。
- XAML 命名空间映射
- Silverlight 文档中显示的用于 Silverlight 库映射的前缀
- Silverlight 默认 XAML 命名空间
- 从核心库中映射其他 XAML 命名空间
- 用于 SDK 客户端库的 XAML
- Silverlight 工具包的 XAML
- 当目标为 Silverlight 版本 3 时用于 Silverlight SDK 程序集的 XAML
- 相关主题
XAML 命名空间映射
Silverlight XAML 通常将默认的 XAML 命名空间用于 URI http://schemas.microsoft.com/winfx/2006/xaml/presentation。此 XAML 命名空间映射到在核心 Silverlight 程序集(例如,System.Windows)中定义的类型。然而,Silverlight 的 .NET Framework 类库还包括对于核心 Silverlight 程序集外部的程序集和类型的引用。此类类型可用在 Silverlight XAML 中,但使用它们要求您将 CLR 命名空间和程序集映射到一个前缀和一个 XAML 命名空间。通常,您在 XAML 页的根元素中实现这一点。然后,您在该页的其他 XAML 用法中使用该前缀来引用映射中的类型。有关更多信息,请参见 Silverlight XAML 命名空间以及将 XAML 命名空间映射为前缀。Visual Studio XAML 编辑包括一项功能,当您定义新的 xmlns 值来帮助简化映射过程时,该功能显示一个下拉列表。
在 Silverlight 文档中找到的 XAML 用法以及 XAML 示例通常按照约定对 XAML 命名空间使用某些前缀字符串。Silverlight 文档中的 XAML 用法或 XAML 示例为了简化目的通常不显示根元素和映射,而是在用法中仅显示前缀。所需的按约定的前缀及其映射可以通过查找下一节中的表来确定。用于 Silverlight 文档中用于描述 XAML 语法的其他约定的更多信息,请参见XAML 用法语法。
用法和示例中使用的前缀与建议的前缀(在 Silverlight SDK 客户端库程序集以及可能来自其他源的程序集中声明为程序集级别属性)相符,这些建议的前缀通常由开发工具推荐。
Silverlight 文档中显示的用于 Silverlight 库映射的前缀
用于定义在 Silverlight XAML 中使用的类的库可能属于以下分类之一:
-
不属于 Silverlight 核心安装的一部分的库。所有 Silverlight 客户端都具有这些库,您始终不必分发或打包这些库就可以访问其类。核心库的示例有 mscorlib 和 System.Windows。
-
不属于 Silverlight SDK 安装的一部分的库。这些库的子分类为 SDK 客户端库和 SDK 服务器库;只有 SDK 客户端库与 XAML 相关。SDK 客户端库的示例有 System.Windows.Controls 和 System.Windows.Data。
-
Silverlight 工具包。Silverlight 工具包向 Silverlight 开发人员资源提供了库以及其他开发人员资源;它可以提供新版本的 Silverlight 工具包,而这些新版本不必与 Silverlight 核心版本计划同步。有时,先前 Silverlight 工具包中包含的库和各个类型可并入后续版本的 SDK 客户端或 Silverlight 核心库中。截至 Silverlight 4 时间范围内的 Silverlight 工具包中的一个库示例是 System.Windows.Controls.DataVisualization.Toolkit。注意,来自此 Silverlight 工具包的类型并未直接记载在此文档集中。而是由 Silverlight 工具包分发其自己的类库文档。然而,后面的章节中将讨论针对 Silverlight 工具包类型的 XAML 用法的常见技术。
-
第三方库。要在 XAML 中引用来自第三方库的类型,必须映射 XAML 命名空间。有关更多信息,请参见 Silverlight XAML 命名空间以及将 XAML 命名空间映射为前缀。
Silverlight 默认 XAML 命名空间
在 xmlns 映射中看到的 Silverlight 默认 XAML 命名空间通过 http://schemas.microsoft.com/winfx/2006/xaml/presentation 来标识。出于对旧版的支持原因,http://schemas.microsoft.com/client/2007/ 标识符被视为等同于标识 Silverlight 默认 XAML 命名空间。
在整个 Silverlight 默认 XAML 命名空间 http://schemas.microsoft.com/winfx/2006/xaml/presentation 中引用的所有类型均来自一个库,即 System.Windows。
Silverlight 默认 XAML 命名空间引用多个 CLR 命名空间。下面是 CLR 命名空间的列表,这些命名空间包含可通过 Silverlight 默认 XAML 命名空间引用的类型,前提是在 Silverlight 核心库 System.Windows 中可找到相关类型:
从核心库中映射其他 XAML 命名空间
由 Silverlight 核心库定义的其他一些类型有时与 Silverlight 应用程序及其 XAML 用法相关,但在 System.Windows 程序集中并未定义这些类型。因此,默认 XAML 命名空间中不包含这些类型。若要从默认 XAML 命名空间之外使用类型,必须将一个前缀映射到 XAML 命名空间。对于其他核心库,这意味着您必须映射 XAML 命名空间以及 clr-namespace 和 assembly 组件,而不是引用 URI 样式的命名空间标识符。有关更多信息,请参见 Silverlight XAML 命名空间以及将 XAML 命名空间映射为前缀。
Silverlight XAML 中常用的一组类型是与语言基元对应的 CLR 类型。例如,String 是表示为一个字符串的 CLR 类型。这些类型在 System CLR 命名空间和 mscorlib 程序集中定义。通常,将为此 XAML 命名空间映射声明前缀 sys:,并且该约定有时用在此文档或相关的 Silverlight 示例代码中。例如,xmlns:sys="clr-namespace:System;assembly=mscorlib" 是可以限定 XAML 用法(如 <sys:Int32>42</sys:Int32>)的映射。通常可以找到 XAML 用法的语言基元作为资源字典的组成部分,以便常用的基元值只在应用程序中的一个位置存在。有关更多信息,请参见资源字典。
映射中的哪些类型可实际用于 XAML 中是一个单独的概念,本主题并未全面讨论此概念。通常,此类型必须为公共类型且必须支持默认的构造函数。有关更多信息,请参见 XAML 和自定义类(适用于自定义类型的 XAML 用法的相同 CLR 规则也适用于核心库中的任何现有类)。
用于 SDK 客户端库的 XAML
截至 Silverlight 4,作为 Silverlight 客户端 SDK 的一部分分发的各种库全部共享一个公共 XAML 命名空间。该 XAML 命名空间的标识符是:
http://schemas.microsoft.com/winfx/2006/xaml/presentation/sdk
映射此 XAML 命名空间的典型前缀为 sdk:。
如果您使用 Visual Studio 2010 的工具包和 Silverlight 可视化设计器,则可以将类型控件从 SDK 客户端库拖到设计图面上。如果这是第一次从该 XAML 页中使用 SDK 客户端类型,则 Visual Studio 2010 自动将一个 XAML 命名空间定义添加到根元素上的 XAML 中:
xmlns:sdk="http://schemas.microsoft.com/winfx/2006/xaml/presentation/sdk"
http://schemas.microsoft.com/winfx/2006/xaml/presentation/sdk 包括来自以下程序集的类型和来自这些程序集的命名空间:
程序集 |
CLR 命名空间 |
---|---|
System.Windows.Controls |
|
System.Windows.Controls.Data |
|
System.Windows.Controls.Data.Input |
|
System.Windows.Controls.Input |
|
System.Windows.Controls.Navigation |
|
System.Windows.Data |
|
![]() |
---|
上表仅仅是出于方便而提供的。对于具有预期 XAML 用法的程序集,将使用 CLR 属性声明 XAML 命名空间的确定行为,并且这些行为由 XAML 使用方(如 Visual Studio 2010 的不同组件)进行解释。 |
除了使用 Visual Studio 2010 的工具包和 Silverlight 可视化设计器之外,还可以手动为 http://schemas.microsoft.com/winfx/2006/xaml/presentation/sdk 定义自己的映射,并使用该 XAML 命名空间的映射来从您的 XAML 中引用 SDK 客户端类型。
如果您要使用 CLR 命名空间和 SDK 客户端库组合,而这一组合不是 http://schemas.microsoft.com/winfx/2006/xaml/presentation/sdk 的一部分,则必须专门映射该组合,如主题 Silverlight XAML 命名空间以及将 XAML 命名空间映射为前缀中所述。
![]() |
---|
来自 System.Windows.Controls 程序集的 System.Windows.Controls.Primitives CLR 命名空间类型不是 http://schemas.microsoft.com/winfx/2006/xaml/presentation/sdk XAML 命名空间的一部分。若要使用来自 System.Windows.Controls 库和 System.Windows.Controls.Primitives CLR 命名空间的类型,必须为它们映射一个 XAML 命名空间并使用前缀。有关更多信息,请参见 Silverlight 库的前缀和映射。System.Windows.Controls.Primitives 命名空间通常包含仅用于模板化和组合主要 SDK 客户端库控件的类型。 |
控件模板 XAML
默认的控件模板可能仍使用 Silverlight 3 样式的映射,因为默认的控件模板可能同时支持 Silverlight 3 用法和 Silverlight 4 用法。您为 Silverlight 4 加载的 XAML 支持任何 Silverlight 3 样式的映射,只要它正确地解析为 Silverlight 4 版本程序集中的一个后备类型。可以在 XAML 中互换使用 Silverlight 3 样式的映射和 Silverlight 4 样式的映射,甚至在同一个文件中和针对同一类型。
Silverlight 4 目标的 Visual Studio 设计图面行为是:如果对于 CLR 命名空间/程序集组合存在现有 Silverlight 3 样式的映射,则生成的 XAML 将重复使用该映射。仅当不存在任何映射时,才生成 sdk: 前缀映射。这样,如果您正在使用本文中找到的默认控件模板起点,则可以在新的控件模板中一致地使用现有的 Silverlight 3 样式的映射。Visual Studio 和相关的工具或进程(例如,F1、编辑编译或运行时加载)可以使用 Silverlight 3 样式的映射或 Silverlight 4 样式的映射来解析该类型。
Silverlight 工具包的 XAML
截至 Silverlight 4,Silverlight 工具包库也共享一个公共 XAML 命名空间。该 XAML 命名空间的标识符是:
http://schemas.microsoft.com/winfx/2006/xaml/presentation/toolkit
映射此 XAML 命名空间的典型前缀为 toolkit:。
如果您使用 Visual Studio 2010 的工具包和 Silverlight 可视化设计器,则可以将类型控件从 Silverlight 工具包拖到设计图面上。如果这是第一次从该 XAML 页中使用工具包类型,则 Visual Studio 2010 自动将一个 XAML 命名空间定义添加到根元素上的 XAML 中:
xmlns:toolkit="http://schemas.microsoft.com/winfx/2006/xaml/presentation/toolkit"
因为此处不介绍 Silverlight 工具包类型,所以本主题并未提供其中列出 http://schemas.microsoft.com/winfx/2006/xaml/presentation/toolkit 的程序集和 CLR 命名空间列表的表。有关更多信息,请参见随 Silverlight 工具包分发的文档。
还可以使用反射工具(如 .NET Reflector)来检查 Silverlight 工具包程序集和读取程序集用来将其 XAML 特征提升到设计器和标记编译器的相同 CLR 属性。在 .NET Reflector 中打开程序集,对其进行反汇编,并检查应用于该程序集的任何 XmlnsDefinitionAttribute 的值。对于不在 http://schemas.microsoft.com/winfx/2006/xaml/presentation/toolkit 中的工具包类型的 XAML 用法,必须专门将程序集和定义 CLR 命名空间映射到一个 XAML 命名空间和前缀。
当目标为 Silverlight 版本 3 时用于 Silverlight SDK 程序集的 XAML
在 Silverlight 3 版本的 SDK 客户端程序集中,未定义 XAML 命名空间 http://schemas.microsoft.com/winfx/2006/xaml/presentation/sdk。相反,如果为程序集中的 CLR 命名空间创建特定的 XAML 命名空间映射,则程序集将声明建议的前缀。
如果您使用 Visual Studio 2010 的工具包和 Silverlight 可视化设计器,则可以将类型控件从 SDK 客户端库拖到设计图面上。如果这是第一次从该 XAML 页中使用 SDK 客户端库类型,则 Visual Studio 2010 自动将一个 XAML 命名空间定义添加到根元素上的 XAML 中:对于 Silverlight 3,这一 XAML 命名空间声明通过为控件的后备类型提供 CLR 命名空间和程序集来定义。客户端库中不同的程序集/CLR 命名空间组合具有不同前缀。例如,当将某个前缀引入到 XAML 时,DataGrid 定义并使用一个 data: 前缀,而 Calendar 定义并使用一个 controls: 前缀。
还可以在 XAML 中手动定义映射,并在 Visual Studio UI 中提升相同的前缀。有关手动定义 XAML 命名空间映射的更多信息,请参见 Silverlight XAML 命名空间以及将 XAML 命名空间映射为前缀。
在 Silverlight 的 .NET Framework 类库参考主题中显示的 XAML 用法中,只显示使用 sdk: 前缀和 http://schemas.microsoft.com/winfx/2006/xaml/presentation/sdk XAML 命名空间的 Silverlight 4 语法。然而,您可能会遇到 Silverlight 3 样式的 XAML 以及特定的 CLR 命名空间映射,甚至目标为 Silverlight 4 时也是如此。例如,默认的控件模板仍可能使用 Silverlight 3 样式的映射。
下表列出了由约定使用的 XAML 命名空间前缀及其映射,它们将由 Silverlight 3 的 SDK 客户端库中的程序集级别属性进行提升。
前缀 |
程序集 |
CLR 命名空间 |
---|---|---|
controls |
System.Windows.Controls |
|
common |
System.Windows.Controls |
|
controlsPrimitives |
System.Windows.Controls |
|
data |
System.Windows.Controls.Data |
|
dataInput |
System.Windows.Controls.Data.Input |
|
dataPrimitives |
System.Windows.Controls.Data |
|
input |
System.Windows.Controls.Input |
|
navigation |
System.Windows.Controls.Navigation |
|
uriMapper |
System.Windows.Controls.Navigation |
说明
-
common 仅与一个类有关:HierarchicalDataTemplate。
-
input 仅与一个类有关:AutoCompleteBox。
-
System.Windows.Controls.Data.Input 程序集中的默认模板映射并使用前缀 ctl,而非 dataInput。
请参见
转载请注明出处和作者,谢谢!
作者:JeffreySu / QQ:498977166
博客:http://szw.cnblogs.com/
Senparc官方教程《微信开发深度解析:微信公众号、小程序高效开发秘籍》,耗时2年精心打造的微信开发权威教程,点击这里,购买正版!