在运行时切换 wpf 资源字典

Posted

技术标签:

【中文标题】在运行时切换 wpf 资源字典【英文标题】:switching wpf resource dictionaries at runtime 【发布时间】:2011-01-23 18:39:01 【问题描述】:

我正在尝试构建一个允许用户在运行时更改主题的 wpf 应用程序。到目前为止,我所做的是创建一个资源字典,其中定义了应用程序的所有颜色,然后我在 xaml 中绑定到这个字典。

下面是我切换资源字典的代码:

if (System.IO.File.Exists(fileName))

   using (FileStream fs = new FileStream(fileName, FileMode.Open))
   
      ResourceDictionary dic = (ResourceDictionary)XamlReader.Load(fs);
      Resources.MergedDictionaries.Clear();
      Resources.MergedDictionaries.Add(dic);
   

这段代码运行良好,我知道它正在切换资源字典,但它不会更新屏幕上已经显示的元素。我的问题是:如何刷新或重新绑定屏幕以考虑新的资源字典?

谢谢

sm

【问题讨论】:

【参考方案1】:

就我而言,我只需要改变:

Resources.MergedDictionaries.Clear();
Resources.MergedDictionaries.Add(dic);

到:

Application.Current.Resources.MergedDictionaries.Clear();
Application.Current.Resources.MergedDictionaries.Add(dic);

【讨论】:

以上是关于在运行时切换 wpf 资源字典的主要内容,如果未能解决你的问题,请参考以下文章

WPF如何在C#代码中引用资源字典中的样式?

在 VS 2010 中将控制台应用程序转换为 WPF 应用程序时遇到问题

2022-04-20 WPF面试题 WPF中StaticResource和DynamicResource之间有什么区别?

2022-04-20 WPF面试题 WPF中StaticResource和DynamicResource之间有什么区别?

WPF跨程序集共享样式(跨程序集隔离样式和代码)

WPF 实现换肤功能