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>

字典<字符串,字符串>

<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)" ...> 实例化具有具有内部约束类型参数 KeyValuePair<TKey,TValue>StringString的新 Queue<T>

XAML 2006 和 WPF 通用 XAML 用法

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

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

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

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

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

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

在适用于 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 中受支持。

另请参阅