WPF 对 DynamicResource 的支持非常棒,因为这允许用户更改正在运行的应用程序的外观。
但 WinRT 不支持 DynamicResource。
编写允许用户动态更改 UI 主题的应用程序的推荐方法是什么?
最佳答案
我目前也在尝试对此提出一个好的设计。在我发现缺少 DynamicResources 之前,我已经准备好了一些东西。哎呀。
我想出的最好方法是拥有一个 ThemedViewModel 基础,用于监听设置 VM 的更改并公开 UI 元素可以绑定(bind)到的资源:
public class ThemedViewModel : ViewModelBase
{
public Brush Foreground { get { return ViewModelSelector.Settings.Theme.Foreground; } }
public ThemedViewModel()
{
ViewModelSelector.Settings.PropertyChanged += (sender,arg) =>
{
if(arg.PropertyName == "Theme")
{
RaisePropertyChanged("Foreground");
}
}
}
}
然后,您可以从中派生任何基于主题的 VM,并且任何主题 UI 元素都将绑定(bind)到公开的资源。它相当干燥,但在我看来确实打破了虚拟机的意义。 VM 中不应包含 UI 资源。我不太喜欢它在虚拟机中的样子。但是,将主题限制在我的代码的 View 部分的每种方法似乎都会在绑定(bind)时遇到问题。
关于wpf - Windows 应用商店应用程序中的 DynamicResource?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10286430/