あるリソース ディクショナリを別のリソース ディクショナリに追加することはできますか?
3 に答える
Dictionary2.xaml で、MergedDictionaries を定義します (開始 ResourceDictionary タグの直後)。
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="/Path/to/Dictionary1.xaml" />
</ResourceDictionary.MergedDictionaries>
問題があります。辞書をマージするたびに、マージされた辞書のコピーが効果的に作成されます。これは再帰的です。Dict3.xaml と Dict4.xaml の両方が Dictionary2.xaml をロードする場合、Dictionary1.xaml の 3 つのインスタンスが作成されます。
解決策はSharedResourceDictionaryです。チュートリアルの実装は出発点と見なす必要があり、使用シナリオによっては、ある程度の調整が必要になる可能性があります。いくつかの落とし穴と解決策については、Google の「wpf SharedResourceDictionary」を参照してください。
私が取り組んでいるスケッチフロー プロジェクトのスニペットは、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 モジュールでは、このようなコードを使用します。