WPF设计应用程序可动态换肤

时间:2011-08-22 16:31:28

标签: c# wpf prism skinning

我正在设计一个相当复杂的WPF应用程序,许多模块将加载Prism v4(一些用户控件将在单独的dll中,以及一些其他函数/插件)。由于我刚刚开始使用WPF,我有几个问题。

我希望所有的GUI都是“skinnable”,用户可以点击并选择不同的配色方案,整个GUI将显示更改为用户选择 - 主屏幕,包括所有模块(即皮肤在运行时更改)

问:你能推荐一些一般方法吗?例如,我可以在不指定任何样式的情况下编写Xaml(具体而言,不将其绑定到动态样式)并且可以在运行时更改吗?然后我如何切换活动皮肤以便它会影响所有加载的用户控件?

由于

1 个答案:

答案 0 :(得分:3)

基本上,你所要做的就是换掉资源字典。这些应该适用于整个应用程序的样式和画笔等。你甚至可以将这些“皮肤”保存在外部组件中。

您应该查看ComponentResourceKeys以“命名”外部资源, 这里有一些关于如何从所述外部程序集加载资源的代码:

using (FileStream fs = new FileStream("MainResources.xaml", FileMode.Open))
{
    ResourceDictionary dic = (ResourceDictionary) XamlReader.Load(fs);
    Resources.MergedDictionaries.Clear();
    Resources.MergedDictionaries.Add(dic);
}

here is a demo on codeproject