7

コード ビハインドで 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;

リソースが見つからないため、これは壊れます。

4

1 に答える 1

8

Source プロパティを使用して、コードからリソース ディクショナリを読み込むことはできません。

MSDNから:

「マージされたディクショナリは、コードを使用して Resources ディクショナリに追加できます。任意の Resources プロパティに存在するデフォルトの最初は空の ResourceDictionary には、デフォルトの最初は空の MergedDictionaries コレクション プロパティもあります。コードを使用してマージされたディクショナリを追加するには、への参照を取得します。目的のプライマリ ResourceDictionary を取得し、その MergedDictionaries プロパティの値を取得し、MergedDictionaries に含まれるジェネリック コレクションで Add を呼び出します。追加するオブジェクトは、新しい ResourceDictionary である必要があります。コードでは、Source プロパティを設定しません。代わりに、 ResourceDictionary object by either creating one or loading one. 既存の ResourceDictionary を読み込んで、ResourceDictionary ルートを持つ既存の XAML ファイル ストリームで XamlReader.Load を呼び出し、XamlReader をキャストする 1 つの方法。戻り値を 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);
于 2010-06-23T11:16:25.590 に答える