wpf - Windows 应用商店应用程序中的 DynamicResource?

标签 wpf windows-runtime windows-store-apps

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/

相关文章:

windows-runtime - WinRt。 UnhandledException 处理程序。堆栈跟踪为空

windows - 如何在通用 Windows 平台应用程序中实现 <Grid>?

javascript - windows 8 javascript 应用程序打印片段不打印 <div> 中的图片

c# - 更改项目时的 WPF 列表框选择问题

c# - .Net 多个应用程序实例但单个文档

c# - WPF 中的全屏窗口

visual-studio - 解决方案 : Payload contains two or more files with the same destination path 'App.xbf' 中的两个应用

c# - Windows Metro 异步加载数据

windows-runtime - 如何检测用户是否关闭了winrt应用程序

c# - 什么是 Visual Studio SDK 中 VirtualSnapshotSpan 中的虚拟空间