23

あるリソース ディクショナリを別のリソース ディクショナリに追加することはできますか?

4

3 に答える 3

26

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」を参照してください。

XAMeLiによるこの質問への回答から

于 2012-05-11T03:30:27.563 に答える
4

私が取り組んでいるスケッチフロー プロジェクトのスニペットは、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 つの追加のリソース ディクショナリを別のリソース ディクショナリにマージすることを示しています。

(デフォルトのスタイルが複数の場所で定義されている場合、それらは互いにオーバーライドされるため、順序が重要になる可能性があることに注意してください)

于 2012-05-11T03:23:59.267 に答える
1

何かのようなもの:

ResourceDictionary resources = new ResourceDictionary();
resources.Source = new Uri("/MyModule;component/MyModule.xaml", 
     UriKind.RelativeOrAbsolute);
Application.Current.Resources.MergedDictionaries.Add(resources);

あなたが探しているものかもしれません。Prism モジュールでは、このようなコードを使用します。

于 2012-05-10T20:25:05.400 に答える