ComponentResourceKey 标记扩展

定义和引用从外部程序集加载的资源的键。 这使资源查找能够在程序集中指定目标类型,而不是程序集或类中的显式资源字典。

XAML 属性用法(设置键值,压缩)

<object x:Key="{ComponentResourceKey {x:Type targetTypeName}, targetID}" ... />

XAML 属性用法(设置键,详细)

<object x:Key="{ComponentResourceKey TypeInTargetAssembly={x:Type targetTypeName}, ResourceID=targetID}" ... />

XAML 属性用法(请求资源,压缩)

<object property="{DynamicResource {ComponentResourceKey {x:Type targetTypeName}, targetID}}" ... />

XAML 属性用法(请求资源,详细)

<object property="{DynamicResource {ComponentResourceKey TypeInTargetAssembly={x:Type targetTypeName}, ResourceID=targetID}}" ... />

XAML 值

价值 DESCRIPTION
targetTypeName 资源程序集定义的公共语言运行时(CLR)类型的名称。
targetID 资源的关键。 查找资源时,targetID 类似于资源的 x:Key 指令

注解

如上述用法所示,{ComponentResourceKey} 标记扩展用法位于两个位置:

  • 由控件作者提供的主题资源字典内键的定义。

  • 当您正在重新定义控件的模板,并希望使用控件主题提供的资源属性值时,可以从程序集获取主题资源。

对于引用来自主题的组件资源,通常建议使用 {DynamicResource} 而不是 {StaticResource}使用。 这体现在用法中。 {DynamicResource} 建议使用,因为用户可以更改主题本身。 如果希望最符合控件作者支持主题的意向的组件资源,则应使组件资源引用也保持动态。

TypeInTargetAssembly 标识目标程序集中的一种类型,其中实际定义了资源。 可以独立定义和使用 A ComponentResourceKey,而无需确切知道 TypeInTargetAssembly 的定义位置,但最终必须通过引用的程序集解决类型。

ComponentResourceKey 的一项常见用法是定义键,然后将这些键作为类的成员公开。 对于此用法,请使用 ComponentResourceKey 类构造函数,而不是标记扩展。 有关详细信息,请参阅 ComponentResourceKey,或主题 控件创作概述中“为主题资源定义和引用密钥”部分。

对于建立键和引用键式资源,属性语法通常用于 ComponentResourceKey 标记扩展。

显示的紧凑语法依赖于 ComponentResourceKey 标记扩展的构造函数签名和位置参数用法。 targetTypeNametargetID的顺序非常重要。 详细语法依赖于ComponentResourceKey无参数构造函数,并以类似于对象元素上真实属性语法的方式设置TypeInTargetAssemblyResourceId。 在详细语法中,设置属性的顺序并不重要。 在主题标记扩展和 WPF XAML中,更详细地描述了这两种替代项(紧凑和详细)之间的关系和机制。

从技术上说,其值 targetID 可以是任何对象,它不必是字符串。 但是,WPF 中最常见的用法是将 targetID 值与字符串形式对齐,以及此类字符串在 XamlName 语法中有效的位置。

ComponentResourceKey 可用于对象元素语法。 在这种情况下,需要指定属性TypeInTargetAssemblyResourceId的值才能正确初始化扩展。

在 WPF XAML 读取器实现中,此标记扩展的处理由 ComponentResourceKey 类定义。

ComponentResourceKey 是标记扩展。 当要求转义特性值应为非文本值或非处理程序名称时,通常会实现标记扩展,相对于只在某些类型或属性上放置类型转换器而言,此需求更具有全局性。 XAML 中的所有标记扩展在其属性语法中使用 { 和 } 字符,这是 XAML 处理器识别标记扩展必须处理该属性的约定。 有关详细信息,请参阅 标记扩展和 WPF XAML

另请参阅