2013-10-09 61 views
1

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

我有一个类库(Module.DLL),其中包含许多WindowsUserControls可以跨各种应用程序共享。我使用在Styles.DLL中定义的密钥Styles来创建用于这些WindowsUserControls的各种Controls的隐式Styles,例如, ButtonComboBox

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

这一切正常。


我的问题是:如何删除字典中托管的应用程序从App.xaml中合并,并将其纳入的Module.dll而不必字典合并到每个窗口的资源呢?

我想我正在寻找类似的app.xaml文件,但对于一个类库...

+0

hmmm ... generic.xaml是一个字典,所以只需要将generic.xaml顶部的字典合并起来,它可以工作,试试吧 –

+0

只需创建一个合并所有文件的资源字典,然后你就可以包含这个在你的app.xaml重新安置字典,那么你只有一个资源字典,包括 – Florian

+0

正如问题所述,我试图摆脱使用App.xaml。我不想为每个使用该模块的应用程序合并资源。 – Nick

回答

2

我使用清除当前字典并合并我想要的方法。其实,“清除”已经被里面的方法调用设置,这里有一个例子:

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"); 
     .... 

    } 

它是非常有帮助!

+0

是的,这与我提出的相同,所以我会将其标记为正确。 – Nick

1

我无法找到一个方法来解决这个使用XAML只。我的解决办法是使用所需ResourceDictionaries合并到Application对象的代码如下:

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

希望这会帮助别人谁也有类似的问题。