none
ComponentResourceKey 标记扩展 RRS feed

  • 常规讨论

  • 日期:2008-9-30 来源:MSDN 制作:yoling group

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

     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 值

    targetTypeName

    在资源程序集内定义的公共语言运行时 (CLR) 公共类型的名称。

    targetID

    资源的键。在查找资源时,targetID 将与资源的 x:Key 属性类似。

     备注

    TypeInTargetAssembly 标识存在于实际定义资源的目标程序集内的类型。无需知道 TypeInTargetAssembly 的确切定义位置,即可定义和使用 ComponentResourceKey,但是最终必须通过所引用的程序集来解析该类型。

    ComponentResourceKey 的常见用法是定义之后将作为类成员公开的键。在该用法中,使用的是 ComponentResourceKey 类构造函数,而不是标记扩展。

    属性语法通常用于 ComponentResourceKey 标记扩展。所显示的精简语法依赖 ComponentResourceKey..::.ComponentResourceKey 构造函数签名,而且 targetTypeName 和 targetID 的提供顺序非常重要。详细语法依赖于 ComponentResourceKey..::.ComponentResourceKey 默认构造函数,之后将按照与对象元素上的实际属性语法类似的方式设置 TypeInTargetAssemblyResourceId。在详细语法中,属性的设置顺序无关紧要。这两种可供选择的语法(精简和详细)的机制以及二者之间的关系在标记扩展和 XAML 主题中有更详细的介绍。

    ComponentResourceKey 可以在对象元素语法中使用。在这种情况下,必须同时指定 TypeInTargetAssemblyResourceId 属性的值才能正确初始化该扩展。

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

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

    2009年6月19日 2:21