我创建了一个新项目,我需要动态更改主题。
我已经看过很多关于这方面的帖子,你可以通过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>
我的问题是,有没有办法不必在主项目中链接这些主题,并让它们完全包含在每个视图项目中?我不明白为什么我们需要在主项目中引用这些?
提前感谢您提供任何帮助
问候,彼得
答案 0 :(得分:0)
有人告诉我这个想法的答案会分享它......
&#34;您需要将包URI用于编译为引用程序集的资源文件:&#34;
即拥有&#34; / MainView2;组件&#34;前缀...
Source = new Uri(=&#34; / MainView2; component / Themes / MyTheme.xaml,UriKind.Relative)