[备忘]Silverlight 库的前缀和映射

 

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 默认 XAML 命名空间

从核心库中映射其他 XAML 命名空间

由 Silverlight 核心库定义的其他一些类型有时与 Silverlight 应用程序及其 XAML 用法相关,但在 System.Windows 程序集中并未定义这些类型。因此,默认 XAML 命名空间中不包含这些类型。若要从默认 XAML 命名空间之外使用类型,必须将一个前缀映射到 XAML 命名空间。对于其他核心库,这意味着您必须映射 XAML 命名空间以及 clr-namespaceassembly 组件,而不是引用 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

System.Windows

System.Windows.Controls.Data

System.Windows.Controls

System.Windows.Controls.Primitives

System.Windows.Controls.Data.Input

System.Windows.Controls

System.Windows.Controls.Input

System.Windows.Controls

System.Windows.Controls.Navigation

System.Windows.Controls

System.Windows.Navigation

System.Windows.Data

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 版本 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

System.Windows.Controls

common

System.Windows.Controls

System.Windows

controlsPrimitives

System.Windows.Controls

System.Windows.Controls.Primitives

data

System.Windows.Controls.Data

System.Windows.Controls

dataInput

System.Windows.Controls.Data.Input

System.Windows.Controls

dataPrimitives

System.Windows.Controls.Data

System.Windows.Controls.Primitives

input

System.Windows.Controls.Input

System.Windows.Controls

navigation

System.Windows.Controls.Navigation

System.Windows.Controls

uriMapper

System.Windows.Controls.Navigation

System.Windows.Navigation

说明

  • common 仅与一个类有关:HierarchicalDataTemplate

  • input 仅与一个类有关:AutoCompleteBox

  • System.Windows.Controls.Data.Input 程序集中的默认模板映射并使用前缀 ctl,而非 dataInput

请参见

概念

其他资源

 
 
自述文件位置:mk:@MSITStore:C:\Users\szw\Desktop\CHS_Silverlight_4.chm::/html/424fbfea-b3c6-4e66-9db7-9d1eba96de67.htm
posted on 2010-10-22 22:57  SZW  阅读(780)  评论(0编辑  收藏  举报