2013-10-09 88 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") 
}); 

希望這會幫助別人誰也有類似的問題。