在运行时动态交换*本地项目* WPF主题(样式)

时间:2013-08-13 07:18:36

标签: wpf prism

我创建了一个新项目,我需要动态更改主题。

我已经看过很多关于这方面的帖子,你可以通过App.xml来实现这个目的。

例如 Resources.MergedDictionaries.Clear();

Resources.MergedDictionaries.Add(new ResourceDictionary
  {
   Source = new Uri(Themes/MyTheme.xaml, UriKind.Relative)
  });

然而,这很好,因为这将是一个大型项目,我将在每个View中拥有自己的项目(即遵循Prism结构),我希望每个项目都没有本地项目主题.xaml文件,并交换这些(即不是在主应用程序(“Shell”)项目中拥有所有内容。

我可以在

找到我的示例项目

https://dl.dropboxusercontent.com/u/30760237/ThemesSwap.zip

在这里我有一个帮助器,它将在运行时更改主题(MainView2.ThemeHelper))

如果您按原样运行项目,当您单击按钮时,我们可以看到旧主题(粉红色背景)删除,但新的主题(黑色背景)不会加载。

我可以让它工作的唯一方法是将以下“链接”添加到App.xaml文件中(它在附件中注释掉)

<ResourceDictionary.MergedDictionaries>
 <ResourceDictionary Source="/MainView2;component/Themes/DarkTheme.xaml"/>
</ResourceDictionary.MergedDictionaries>

我的问题是,有没有办法不必在主项目中链接这些主题,并让它们完全包含在每个视图项目中?我不明白为什么我们需要在主项目中引用这些?

提前感谢您提供任何帮助

问候,彼得

1 个答案:

答案 0 :(得分:0)

有人告诉我这个想法的答案会分享它......

&#34;您需要将包URI用于编译为引用程序集的资源文件:&#34;

即拥有&#34; / MainView2;组件&#34;前缀...

Source = new Uri(=&#34; / MainView2; component / Themes / MyTheme.xaml,UriKind.Relative)

相关问题