控件库的WPF样式

时间:2013-10-09 10:52:34

标签: c# wpf styles wpf-controls themes

我有一个库(Styles.DLL),其中包含一个键控的WPF Styles的集合。

我有一个类库(Module.DLL),其中包含许多WindowsUserControls,可以在各种应用程序之间共享。我使用Styles中定义的键控Styles.DLL为这些StylesControls上使用的各种Windows创建隐式UserControls,例如ButtonComboBox

然后我有一个应用程序(App.EXE),其中我使用Windows中定义的Module.DLL。我合并了ResourceDictionaries Styles.DLLApp.xaml所需的App.EXE

这一切都有效。


我的问题是:如何在托管应用程序中删除从App.xaml合并的字典,并将其包含在Module.DLL中,而不必将字典合并到每个Window的资源中?

我想我正在寻找类似于app.xaml文件但类似于库类的东西......

2 个答案:

答案 0 :(得分:3)

我使用一种方法清除当前的词典并合并我想要的词典。实际上,必须在方法调用中设置“Clear”,这是一个例子:

    void AddResourceDictionary(string source)
    {
        ResourceDictionary resourceDictionary = Application.LoadComponent(new Uri(source, UriKind.RelativeOrAbsolute)) as ResourceDictionary;
        Application.Current.Resources.MergedDictionaries.Add(resourceDictionary);
    }

实施自定义主题/皮肤/资源:

        private void ThemeNameHere()
    {
        Application.Current.Resources.Clear();

        AddResourceDictionary("Computar.Wpf;component/Style/MyStyle.xaml");
        ....

    }

非常有帮助!

答案 1 :(得分:1)

我找不到使用XAML解决此问题的方法。我的解决方案是使用以下代码将所需的ResourceDictionaries合并到代码中的Application对象中:

Application.Current.Resources.MergedDictionaries.Add(new ResourceDictionary
{
    Source = new Uri(@"pack://application:,,,/Styles.DLL;component/Styles.xaml")
});

希望这可以帮助有类似问题的人。