我创建了一个新项目,我需要在其中动态更改主题。
我已经看到很多关于这个的帖子,你可以通过 App.xml 执行此操作。
例如 Resources.MergedDictionaries.Clear();
Resources.MergedDictionaries.Add(new ResourceDictionary
{
Source = new Uri(Themes/MyTheme.xaml, UriKind.Relative)
});
但是,这很好用,因为这将是一个大型项目,并且我将在它自己的项目中拥有每个视图(即遵循 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>
我的问题是,有没有办法不必在主项目中链接这些主题,并且让它们完全包含在每个视图项目中?我不明白为什么我们需要在主项目中引用这些?
提前感谢您的帮助
问候,彼得