0

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

我已经看到很多关于这个的帖子,你可以通过 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>

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

提前感谢您的帮助

问候,彼得

4

1 回答 1

0

有人告诉我这个问题的答案,所以想分享一下..

“您需要将包 URI 用于编译成引用程序集的资源文件:”

即具有“/MainView2;component”前缀...

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

于 2013-08-14T00:36:33.917 回答