簡體   English   中英

合並資源詞典

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM