通过将该值推迟为引用一个已定义的资源,从而为任何 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 标记扩展。 有关其相对优点和性能影响DynamicResource
StaticResource
的讨论,请参阅 XAML 资源。
ResourceKey应该对应于页面、应用程序、可用控件主题和外部资源或系统资源中某个级别由x:Key 指令确定的现有资源,资源查找将按该顺序进行。 有关静态和动态资源的资源查找的详细信息,请参阅 XAML 资源。
资源键可以是 XamlName 语法中定义的任何字符串。 资源键也可能是其他对象类型,例如 Type。 Type 键是控件样式可以通过主题进行设置的基础。 有关详细信息,请参阅 控件编写概述。
用于查找资源值的 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。