x:Type 标记扩展
提供 CLR Type 对象,该对象是指定 XAML 类型的基础类型。
XAML 属性用法
<object property="{x:Type prefix:typeNameValue}" .../>
XAML 对象元素用法
<x:Type TypeName="prefix:typeNameValue"/>
XAML 值
价值 | 描述 |
---|---|
prefix |
自选。 映射非默认 XAML 命名空间的前缀。 通常不需要指定前缀。 请参阅“备注”。 |
typeNameValue |
必填。 可解析为当前默认 XAML 命名空间的类型名称;如果提供了 prefix ,则为指定的映射前缀。 |
言论
x:Type
标记扩展具有与 C# 中的 typeof()
运算符或 Microsoft Visual Basic 中的 GetType
运算符类似的函数。
x:Type
标记扩展为采用类型 Type的属性提供从字符串转换行为。 输入是 XAML 类型。 输入 XAML 类型和输出 CLR Type 之间的关系是输入 Type 是输入 XamlType的 UnderlyingType,根据 XAML 架构上下文和上下文提供的 IXamlTypeResolver 服务查找必要的 XamlType。
在 .NET XAML 服务中,此标记扩展的处理由 TypeExtension 类定义。
在特定框架实现中,一些将 Type 作为值的属性可以直接接受类型的名称(类型 Name
的字符串值)。 但是,实现此行为是一个复杂的方案。 有关示例,请参阅下面的“WPF 用法说明”部分。
属性语法是用于此标记扩展的最常见语法。 在将 x:Type
标识符字符串分配为基础 TypeExtension 扩展类的 TypeName 值之后提供的字符串令牌。 在基于 CLR 类型的 .NET XAML 服务的默认 XAML 架构上下文下,此属性的值是所需类型的 Name,或包含前面有非默认 XAML 命名空间映射前缀的 Name。
x:Type
标记扩展可用于对象元素语法。 在这种情况下,需要指定 TypeName 属性的值才能正确初始化扩展。
x:Type
标记扩展还可以用作详细属性;但是,此用法并不典型:<object property="{x:Type TypeName=typeNameValue}" .../>
WPF 用法说明
默认 XAML 命名空间和类型映射
WPF 编程的默认 XAML 命名空间包含典型 XAML 方案所需的大多数 XAML 类型;因此,在引用 XAML 类型值时,通常可以避免前缀。 如果引用自定义程序集中的类型或 WPF 程序集中存在的类型,但来自未映射到默认 XAML 命名空间的 CLR 命名空间,则可能需要映射前缀。 有关前缀、XAML 命名空间和映射 CLR 命名空间的详细信息,请参阅 WPF XAML的 XAML 命名空间和命名空间映射。
支持 typename-as-String 的类型属性
WPF 支持用于指定类型 Type 的某些属性的值的技术,而无需使用 x:Type
标记扩展。 可以改为将值指定为命名类型的字符串。 示例包括 ControlTemplate.TargetType 和 Style.TargetType。 不支持通过类型转换器或标记扩展提供此行为。 相反,这是通过 FrameworkElementFactory实现的延迟行为。
Silverlight 支持类似的约定。 事实上,Silverlight 目前不支持其 XAML 语言支持中的 {x:Type}
,并且不接受在少数旨在支持 WPF-Silverlight XAML 迁移的情况之外 {x:Type}
用法。 因此,typename-as-string 行为内置于所有 Silverlight 本机属性评估中,其中 Type 是值。
XAML 2009
XAML 2009 为泛型类型提供额外的支持,并修改 x:TypeArguments
和 x:Type
的功能行为,以提供此支持。
x:TypeArguments
泛型对象实例化的关联对象元素可以位于根以外的元素上。 有关详细信息,请参阅 x:TypeArguments 指令的“XAML 2009”部分。XAML 2009 支持在标记中指定泛型类型的约束的语法。 这可以由
x:TypeArguments
、x:Type
或两个功能组合使用。处理 XAML 2009 加载时的 WPF XAML 实现还会将此功能添加到使用类型 Type的某些框架属性的隐式类型转换行为。
在 WPF 中,可以使用 XAML 2009 功能,但仅适用于松散 XAML(未编译标记的 XAML)。 WPF 的标记编译 XAML 和 XAML 的 BAML 形式目前不支持 XAML 2009 关键字和功能。