DynamicResource 标记扩展

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

XAML 属性用法

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

XAML 属性元素用法

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

XAML 值

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

注解

在初始编译期间,A 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

另请参阅