DynamicResource 标记扩展

通过推迟一个值作为对已定义资源的引用,为任何 XAML 属性提供该值。 该资源的查找行为类似于运行时查找。

XAML 属性用法

<object property="{DynamicResource key}" ... />  

XAML 属性元素用法

<object>  
  <object.property>  
    <DynamicResource ResourceKey="key" ... />  
  </object.property>  
</object>  

XAML 值

说明
key 所请求资源的密钥。 如果资源在标记中创建,则此键最初由 x:Key 指令分配,如果资源在代码中创建,则此键在调用 ResourceDictionary.Add 时作为 key 参数提供。

注解

DynamicResource 将在初始编译期间创建一个临时表达式,从而延迟查找资源,直到真正需要请求的资源值来构造对象。 这可能是在加载 XAML 页面之后。 将基于以从当前页面范围开始的所有活动资源字典为范围的键搜索查找资源值,并替换编译中的占位符表达式。

重要

就依赖属性优先级而言,DynamicResource 表达式等效于应用动态资源引用的位置。 如果为先前使用 DynamicResource 表达式作为本地值的属性设置本地值,则会完全删除 DynamicResource。 有关详细信息,请参阅依赖属性值优先级

某些资源访问方案特别适合于 DynamicResource,这与 StaticResource 标记扩展相反。 有关 DynamicResourceStaticResource 的相对优点和性能影响的讨论,请参阅 XAML 资源

指定的 ResourceKey 在某种程度上应对应于由 x:Key 指令在你的页面、应用程序、可用控件主题和外部资源或系统资源中确定的现有资源,并且资源查找将按该顺序进行。 有关静态和动态资源查找的详细信息,请参阅 XAML 资源

资源键可以是以 XamlName 语法定义的任何字符串。 资源键也可能是其他对象类型,例如 TypeType 键是如何按主题设置控件样式的基础。 有关详细信息,请参阅控件创作概述

查找资源值的 API(例如 FindResource)遵循与 DynamicResource 所用相同的资源查找逻辑。

引用资源的替代声明性方法与 StaticResource 标记扩展一样。

特性语法是最常用于该标记扩展的语法。 在 DynamicResource 标识符字符串之后提供的字符串标记被指定为基础 ResourceKey 扩展类的 DynamicResourceExtension 值。

DynamicResource 可以在对象元素语法中使用。 在这种情况下,需要指定 ResourceKey 属性的值。

DynamicResource 还可以在详细特性用法中使用,以便将 ResourceKey 属性指定为一个 property=value 对:

<object property="{DynamicResource ResourceKey=key}" ... />  

如果扩展具有一个以上的可设置属性,或者某些属性是可选的,则详细用法通常会很有用。 由于 DynamicResource 仅有一个可设置的属性,并且此属性是必需的,因此该详细用法不具有典型性。

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

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

另请参阅