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 是输入 XamlTypeUnderlyingType,根据 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.TargetTypeStyle.TargetType。 不支持通过类型转换器或标记扩展提供此行为。 相反,这是通过 FrameworkElementFactory实现的延迟行为。

Silverlight 支持类似的约定。 事实上,Silverlight 目前不支持其 XAML 语言支持中的 {x:Type},并且不接受在少数旨在支持 WPF-Silverlight XAML 迁移的情况之外 {x:Type} 用法。 因此,typename-as-string 行为内置于所有 Silverlight 本机属性评估中,其中 Type 是值。

XAML 2009

XAML 2009 为泛型类型提供额外的支持,并修改 x:TypeArgumentsx:Type 的功能行为,以提供此支持。

  • x:TypeArguments 泛型对象实例化的关联对象元素可以位于根以外的元素上。 有关详细信息,请参阅 x:TypeArguments 指令的“XAML 2009”部分。

  • XAML 2009 支持在标记中指定泛型类型的约束的语法。 这可以由 x:TypeArgumentsx:Type或两个功能组合使用。

  • 处理 XAML 2009 加载时的 WPF XAML 实现还会将此功能添加到使用类型 Type的某些框架属性的隐式类型转换行为。

在 WPF 中,可以使用 XAML 2009 功能,但仅适用于松散 XAML(未编译标记的 XAML)。 WPF 的标记编译 XAML 和 XAML 的 BAML 形式目前不支持 XAML 2009 关键字和功能。

另请参阅