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>。
字典<字符串,字符串>
<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>String 和 String的新 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 中受支持。
另请参阅
- x:Class 指令
- x:Type 标记扩展
- 公共 XAML 语言基元的内置类型
- XAML 中的
泛型