[英]Merging Resources Dictionaries
我正在嘗試將wpf資源字典合並到后面的代碼上,但是為了解決這個問題,這是行不通的。 如果我嘗試合並文檔本身的字典,它正在運行,例如:
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:WpfApplication212;assembly=WpfApplication212">
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="Theme.xaml"></ResourceDictionary>
</ResourceDictionary.MergedDictionaries>
<Style TargetType="{x:Type local:URComboBox}" BasedOn="{StaticResource ComboBoxStyle}">
</Style>
這是有效的,但如果我評論ResourceDictionary.MergedDictionaries並在代碼中嘗試這樣:
ResourceDictionary skin = new ResourceDictionary();
skin.Source = styleLocation;
ResourceDictionary skinFather = new ResourceDictionary();
skinFather.MergedDictionaries.Add(skin);
skinFather.Source = styleLocationFather;
這會因為無法找到資源而中斷。
您不能使用Source屬性從代碼加載資源字典。
來自MSDN :
“合並的字典可以通過代碼添加到資源字典中。對於任何Resources屬性,默認的,最初為空的ResourceDictionary也有一個默認的,最初為空的MergedDictionaries集合屬性。要通過代碼添加合並的字典,您將獲得對該字典的引用。所需的主ResourceDictionary,獲取其MergedDictionaries屬性值,並在MergedDictionaries中包含的泛型Collection上調用Add。您添加的對象必須是新的ResourceDictionary。在代碼中,您不需要設置Source屬性。相反,您必須獲取ResourceDictionary對象通過創建一個或加載一個。一種方法是加載現有的ResourceDictionary以在具有ResourceDictionary根的現有XAML文件流上調用XamlReader.Load,然后將XamlReader.Load返回值轉換為ResourceDictionary。
因此,一些偽代碼:
ResourceDictionary myResourceDictionary = XamlReader.Load(someXamlStreamReader);
anotherResourceDictionary.MergedDictionaries.Add(myResourceDictionary);
Uri uri = new Uri("/PageResourceFile.xaml", UriKind.Relative);
StreamResourceInfo info = Application.GetResourceStream(uri);
System.Windows.Markup.XamlReader reader = new System.Windows.Markup.XamlReader();
Page page = (Page)reader.LoadAsync(info.Stream);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.