3

私は ResourceDictionary について読んでいて、混乱するところまで来ました。

XAML ごとに 1 つの ResourceDictionary しか持てないようです。したがって、複数使用したい場合は、ResourceDictionaries をマージできます。

辞書をマージできる場合、「グローバル」スタイルはどこに置くべきですか? アプリケーション全体で一貫したすべてのスタイルを持つ ApplicationResourceDictionary を持つことができます。または、この情報を App.xaml ファイルに保存することもできます。どちらも有効なオプションのようですが、そうであるかどうかはわかりません。

これは個人的な選択の問題ですか、それともどちらが優れているのでしょうか? XAML ページでいくつかを分割するのではなく、すべてのスタイルが (辞書内で) まとめられているため、それらを ResourceDictionaries に保持する方が良いようです。

4

1 に答える 1

7

現在のソリューションには 100 以上のプロジェクトがあります。それぞれが、テーマや統一性などのためのグローバル リソースを備えたいくつかのリソース ディクショナリにアクセスする必要があります。そのために私が行うことは、リソース ディクショナリを 1 つのプロジェクトの中央に配置し、他のプロジェクトが参照するようにすることです。この場合、それを「インフラストラクチャ」と呼び、ディクショナリを提供します。たとえば、マージされた辞書を使用して、独自の app.xaml を介して直接各プロジェクトに。

<Application.Resources>
  <ResourceDictionary>
    <ResourceDictionary.MergedDictionaries>
        <ResourceDictionary Source="/Our.Client.Infrastructure;component/Resources/Styles/ResDictName1.xaml" />
        <ResourceDictionary Source="/Our.Client.Infrastructure;component/Resources/Styles/ResDictName2.xaml" />
    </ResourceDictionary.MergedDictionaries>
  </ResourceDictionary>
</Application.Resources>

スタイルをグローバルに適用する方法は、カスタム リソース ディクショナリの下部でスタイルを指定し、デフォルト リソース ディクショナリから同じ宣言を削除することです。たとえば、あなたが見つけた場合;

<Style BasedOn="{StaticResource DefaultButtonStyle}" TargetType="Button" />

デフォルトの CoreStyles.xaml または SdkStyles.xaml またはそれらが何であれ、私はそれを削除し、その宣言をカスタム リソース ディクショナリの一番下に移動し、それに応じて次のように変更します。

<Style BasedOn="{StaticResource OurSuperAwesomeCustomNewGlobalButtonStyle}" TargetType="Button" />

出来上がり...Buttonその後は、元のデフォルト テンプレートの代わりに、デフォルトでカスタム スタイルを継承します。ソリューション全体で 1 つまたは 2 つのリソース ディクショナリを使用することの利点は、それを採用するとすぐに明らかになります。つまり、テンプレートが実際にグローバルに利用可能である必要がある場合です。使用されているビューにのみ関連するアドホックなテンプレートを使用している場合は、明示的にそのビューに保持します。他に何も必要ない場合は、他の場所に保持する必要はありません。

お役に立てれば。

于 2013-04-03T18:44:23.403 に答える