x:TypeArguments 指令

将泛型的约束类型参数传递给泛型类型的构造函数。

XAML 属性用法

<object x:TypeArguments="typeString" .../>

XAML 值

说明
object XAML 类型的对象元素声明,它由 CLR 泛型类型提供支持。 如果 object 引用的 XAML 类型不是来自默认的 XAML 命名空间,object 需要一个前缀来指示 object 存在的 XAML 命名空间。
typeString 将一个或多个 XAML 类型名称声明为字符串的字符串,它为 CLR 泛型类型提供类型参数。 有关其他语法说明,请参阅“注解”。

备注

在大多数情况下,作为 typeString 字符串中的信息项使用的 XAML 类型都带有前缀。 典型的 CLR 泛型约束类型(例如 Int32String)来自 CLR 基类库。 这些库没有映射到典型的特定于框架的默认 XAML 命名空间,因此,需要一个前缀映射才能使用 XAML。

可以使用逗号分隔符指定多个 XAML 类型名称。

如果泛型约束本身使用泛型类型,则嵌套的约束类型参数可以包含在括号 () 中。

请注意,此 x:TypeArguments 的定义特定于 .NET XAML 服务并使用 CLR 支持。 可以在 [MS-XAML] 7.3.11 部分中找到语言级别定义。

用法示例

对于这些示例,假设声明了以下 XAML 命名空间定义:

xmlns:sys="clr-namespace:System;assembly=mscorlib"
xmlns:scg="clr-namespace:System.Collections.Generic;assembly=mscorlib"

列出<字符串>

<scg:List x:TypeArguments="sys:String" ...> 使用 String 类型参数实例化一个新的 List<T>

Dictionary<String,String>

<scg:Dictionary x:TypeArguments="sys:String,sys:String" ...> 使用两个 String 类型参数实例化一个新的 Dictionary<TKey,TValue>

Queue<KeyValuePair<String,String>>

<scg:Queue x:TypeArguments="scg:KeyValuePair(sys:String,sys:String)" ...> 实例化一个新的 Queue<T>,其约束为 KeyValuePair<TKey,TValue>,具有内部约束类型参数 StringString

XAML 2006 和 WPF 泛型 XAML 用法

对于 XAML 2006 用法,以及用于 WPF 应用程序的 XAML,XAML 中的 x:TypeArguments 和泛型类型用法通常存在以下限制:

  • 只有 XAML 文件的根元素才能支持引用泛型类型的泛型 XAML 用法。

  • 根元素必须映射到具有至少一个类型参数的泛型类型。 示例为 PageFunction<T>。 页函数是 WPF 中支持 XAML 泛型用法的主要方案。

  • 泛型的根元素 XAML 对象元素还必须使用 x:Class 声明一个分部类。 即使定义 WPF 生成操作,也是如此。

  • x:TypeArguments 不能引用嵌套的泛型约束。

XAML 2009 或 XAML 2006 没有 WPF 3.0 或 WPF 3.5 依赖项

在 XAML 2006 或 XAML 2009 的 .NET XAML 服务中,对泛型 XAML 用法的 WPF 相关限制被放宽。 可以在后备类型系统和对象模型支持的 XAML 标记的任何位置实例化一个泛型对象元素。

如果使用 XAML 2009 而不是映射 CLR 基类型来获取常见语言基元的 XAML 类型,则可以使用 XAML 语言基元的内置类型作为 typeString 中信息项。 例如,可以声明以下(未显示的前缀映射,但 x 是用于 XAML 2009 的 XAML 语言 XAML 命名空间):

<my:BusinessObject x:TypeArguments="x:String,x:Int32"/>

在 WPF 中,面向 .NET Framework 4 或 .NET Core 3.0(或更高版本)时,可以将 XAML 2009 功能与 x:TypeArguments 结合使用,但仅适用于松散的 XAML(未进行标记编译的 XAML)。 WPF 的已编译标记的 XAML 以及 XAML 的 BAML 形式当前不支持 XAML 2009 关键字和功能。 如果需要标记编译 XAML,则必须在 XAML 2006 和 WPF 泛型 XAML 用法部分中所述的限制下操作。 BAML 仅在 .NET Framework 中受支持。

另请参阅