ThemeDictionary 标记扩展
为集成第三方控件的自定义控件作者或应用程序提供了一种方法,用于加载主题特定的资源字典以设置控件样式。
XAML 属性用法
<object property="{ThemeDictionary assemblyUri}" ... />
XAML 对象元素用法
<object>
<object.property>
<ThemeDictionary AssemblyName="assemblyUri"/>
<object.property>
<object>
XAML 值
值 | 描述 |
---|---|
assemblyUri |
包含主题信息的程序集的统一资源标识符 (URI)。 通常,这是一个引用较大包中程序集的 Pack URI。 程序集资源和包 URI 简化了部署问题。 有关详细信息,请参阅 WPF 中的 Pack URI。 |
言论
此扩展旨在仅填充一个特定的属性值:ResourceDictionary.Source 的值。
通过使用此扩展,您可以指定一个仅包含资源的程序集,其中的某些样式仅在 Windows Aero 主题应用于用户系统时使用,其他样式仅在 Luna 主题激活时使用,等等。 通过使用此扩展,可以自动让特定于控件的资源字典的内容失效,并在需要时重新将其加载为特定于其他主题的内容。
assemblyUri
字符串(AssemblyName 属性值)构成了命名约定的基础,该命名约定用于标识适用于特定主题的字典。 ThemeDictionary
的 ProvideValue 逻辑通过生成一个指向某个特殊主题字典变体(包含在预编译的资源程序集中)的统一资源标识符 (URI) 来完成约定。 本文并未将该约定(即主题与一般控件样式设置和页/应用程序级样式设置之间的交互)作为一个概念进行详细介绍。 使用 ThemeDictionary
的基本场景是指定在应用程序级声明的 ResourceDictionary
的 Source 属性。 将 URI 通过 ThemeDictionary
扩展而不是作为一个直接的 URI 提供给程序集时,扩展逻辑将提供系统主题更改时适用的失效逻辑。
属性语法是用于此标记扩展的最常见语法。 在 ThemeDictionary
标识符字符串之后提供的字符串标记被指定为基础 AssemblyName 扩展类的 ThemeDictionaryExtension 值。
还可以在对象元素语法中使用 ThemeDictionary
。 在这种情况下,需要指定 AssemblyName 属性的值。
ThemeDictionary
还可以在详细特性用法中使用,以便将 Member 属性指定为一个 property=value 对:
<object property="{ThemeDictionary AssemblyName=assemblyUri}" ... />
如果扩展具有一个以上的可设置属性,或者某些属性是可选的,则详细用法通常会很有用。 由于 ThemeDictionary
只有一个必需的可设置属性,因此这种冗长的用法并不典型。
在 WPF XAML 处理器实现中,此标记扩展的处理由 ThemeDictionaryExtension 类定义。
ThemeDictionary
是标记扩展。 当要求转义特性值应为非文本值或非处理程序名称时,通常会实现标记扩展,相对于只在某些类型或属性上放置类型转换器而言,此需求更具有全局性。 XAML 中的所有标记扩展在其属性语法中使用 { 和 } 字符,这是 XAML 处理器识别标记扩展必须处理该属性的约定。 有关详细信息,请参阅 标记扩展和 WPF XAML。