我正在使用需要实现主题的非常大的 Silverlight 5 应用程序。不幸的是,我不能使用 C1(组件一)或 Silverlight Toolkit 主题机制,因为我必须实现的 xaml 和代码更改的巨大。我被迫做一些开箱即用的事情。
作为起点,我通过参考 Stack Overflow Using Mef to Import a WPF DataTemplate上由 @Scott Whitlock 编写的帖子创建了一个演示项目。该帖子描述了如何动态加载 Silverlight/WPF 资源字典并将其添加到App.Current.Resources.MergedDictionaries
Silverlight/WPF 应用程序内的集合中。
我创建了 4 个项目。第一个是 Silverlight 5 应用程序本身,第二个、第三个和第四个是用于定义所有主题细节的 silverlight 类库。每个类库都有一个入口点,它是ResourceDictionary
.
在 AppStart 事件中,应用程序加载默认主题类库,它本质上是一个白板,所有默认样式都在 Silverlight 中定义。通过加载我的意思是DefaultTheme
类库中定义的资源字典被添加到App.Current.Resources.MergedDictionaries
集合中。
当用户从应用程序的组合框中选择另一个主题时,代码会删除现有的默认主题并将蓝色或红色,或任何其他主题的入口点资源字典添加到App.Current.Resources.MergedDictionaries
集合中。
但是,即使发生此操作时没有引发任何错误,样式本身也不会重新应用。我已经验证每个主题都具有相同的样式键。
关于如何App.Current.RootVisual
在“主题切换”之后强制重新应用新添加的资源字典中的样式的任何想法?
谢谢,