x:TypeArguments 指令
将泛型的约束类型参数传递给泛型类型的构造函数。
XAML 属性用法
<object x:TypeArguments="typeString" .../>
XAML 值
值 | 说明 |
---|---|
object |
XAML 类型的对象元素声明,它由 CLR 泛型类型提供支持。 如果 object 引用的 XAML 类型不是来自默认的 XAML 命名空间,object 需要一个前缀来指示 object 存在的 XAML 命名空间。 |
typeString |
将一个或多个 XAML 类型名称声明为字符串的字符串,它为 CLR 泛型类型提供类型参数。 有关其他语法说明,请参阅“注解”。 |
备注
在大多数情况下,作为 typeString
字符串中的信息项使用的 XAML 类型都带有前缀。 典型的 CLR 泛型约束类型(例如 Int32 和 String)来自 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>,具有内部约束类型参数 String 和 String。
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 中受支持。