1つのリソースディクショナリを別のリソースディクショナリに追加することは可能ですか?助けてくれてありがとう。
Dictionary2.xamlで、MergedDictionariesを定義します(ResourceDictionaryタグを開いた直後)。
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="/Path/to/Dictionary1.xaml" />
</ResourceDictionary.MergedDictionaries>
落とし穴があります。辞書をマージするたびに、マージされた辞書のコピーを効果的に作成します。そしてそれは再帰的です-両方ともDictionary2.xamlをロードするDict3.xamlとDict4.xamlがある場合、Dictionary1.xamlの3つのインスタンスが作成されます
解決策は SharedResourceDictionary です。チュートリアルの実装は出発点と見なす必要があり、使用シナリオに応じて、おそらくある程度の調整が必要になります。いくつかの落とし穴と解決策については、Googleの「wpfSharedResourceDictionary」。
私が取り組んでいるsketchflowプロジェクトからのスニペットで、xamlのリソース辞書をマージする方法を示しています。
<Application.Resources>
<!-- Resources scoped at the Application level should be defined here. -->
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="/Microsoft.Expression.Prototyping.SketchControls;component/ScrollViewerStyles.xaml"/>
<ResourceDictionary Source="/[ProjectABC];component/[fileXYZ].xaml"/>
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</Application.Resources>
これは、2つの追加のリソースディクショナリを別のリソースディクショナリにマージすることを示しています。
(デフォルトのスタイルが複数の場所で定義されている場合、それらは互いに上書きされるため、順序が重要になる可能性があることに注意してください)
何かのようなもの:
ResourceDictionary resources = new ResourceDictionary();
resources.Source = new Uri("/MyModule;component/MyModule.xaml",
UriKind.RelativeOrAbsolute);
Application.Current.Resources.MergedDictionaries.Add(resources);
あなたが探しているものかもしれません。 Prismモジュールではこのようなコードを使用します。
より多くの文脈がなければ、あなたに特定の答えを与えることは困難です。リソースディクショナリのマージに関連する可能性のあるリソースは次のとおりです。