【发布时间】:2017-03-24 15:05:39
【问题描述】:
我想在我的应用程序上实现主题支持。我知道如何通过在外部程序集上使用 ResourceDictionaries 并在运行时应用它们来做到这一点,但我想启用使用自定义主题设置和/或调色板的主题。我不知道最好的方法是什么。
我的想法是能够使用这样的标记来声明主题:
<Theme Name="MyTheme"
Description="Simple example theme"
Icon="MyTheme.ico"
Thumbnail="thumbnail.png">
<Theme.Settings>
<Setting Key="EnableShadows" Text="Enable theme shadows" Type="{x:Type system:Boolean}" Value="True"/>
</Theme.Settings>
<Theme.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="MyTheme.xaml"/>
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</Theme.Resources>
</Theme>
好吧,这段代码 sn-p 只是它可以完成的一种方式。我的问题是如何在 WPF 中做这样的事情(如何创建一个可以以这种方式用作主题的 Theme 类)。
【问题讨论】:
-
我设法通过从 ResourceDictionary 类继承来做到这一点。通过合并不同类型的自定义 ResourceDictionaries,创建一棵树,我现在可以在每个字典类型上实现自定义属性,并通过这种方式控制流使用 ThemesManager 类的应用程序字典。这使我能够拥有一个继承自 ResourceDictionary 的 Theme 类,它具有自己的属性(如名称、图标等),并在其中合并了多个 SubTheme 和 ColorTheme 类(也继承自 ResourceDictionary)。