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 标记扩展。 请参阅 XAML 资源,了解 DynamicResourceStaticResource的相对优点和性能影响。

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

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

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

另一种声明性引用资源的方式是使用 StaticResource 标记扩展

属性语法是用于此标记扩展的最常见语法。 给定的字符串令牌被分配为 DynamicResource 标识符字符串后继的基础 DynamicResourceExtension 扩展类的 ResourceKey 值。

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

DynamicResource 还可以在详细说明的属性使用中将 ResourceKey 属性指定为 property=value 对:

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

通常,当扩展具有多个可设置属性或者某些属性是可选时,详细的使用方式会更为有用。 由于 DynamicResource 只有一个必需的可设置属性,因此这种冗长的用法并不常见。

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

DynamicResource 是标记扩展。 通常,当需要将属性值转义为非字面值或处理程序名称时,并且这种需求比仅对某些类型或属性应用类型转换器更具有全局性,便会实现标记扩展。 XAML 中的所有标记扩展在其属性语法中使用 { 和 } 字符,这是 XAML 处理器识别标记扩展必须处理该属性的约定。 有关详细信息,请参阅 标记扩展和 WPF XAML

另请参阅