ResourceDictionary.ThemeDictionaries プロパティ

定義

"HighContrast" のテーマ値を指定するなど、テーマのシナリオに対応するために特にキーが設定され、構成されているマージされたリソース ディクショナリのコレクションを取得します。

public:
 property IMap<Platform::Object ^, Platform::Object ^> ^ ThemeDictionaries { IMap<Platform::Object ^, Platform::Object ^> ^ get(); };
IMap<IInspectable, IInspectable const&> ThemeDictionaries();
public IDictionary<object,object> ThemeDictionaries { get; }
var iMap = resourceDictionary.themeDictionaries;
Public ReadOnly Property ThemeDictionaries As IDictionary(Of Object, Object)
<ResourceDictionary>
  <ResourceDictionary.ThemeDictionaries>
    oneOrMoreThemeDictionaries
  </ResourceDictionary.ThemeDictionaries>
</ResourceDictionary>

プロパティ値

IMap<Object,Object>

IDictionary<Object,Object>

IMap<Platform::Object,Platform::Object>

IMap<IInspectable,IInspectable>

ResourceDictionary テーマディクショナリのディクショナリ。 各キーは x:Key で指定する必要があります。

この例では、"既定" テーマのブラシ スタイルを定義する ThemeDictionaries ディクショナリ、ハイ コントラストのユーザー テーマの選択肢にマップされる 2 つの既存の "HighContrast*" テーマ、およびカスタムハイ コントラスト テーマを示します。 ディクショナリは、カスタム コントロールのコントロール テンプレートによって使用されます。 これは ハイ コントラスト サンプルの一部です。

<ResourceDictionary>
  <ResourceDictionary.ThemeDictionaries> 
    <ResourceDictionary x:Key="Default"> 
      <SolidColorBrush x:Key="TargetBackground" Color="Red"/> 
      <SolidColorBrush x:Key="TargetBorderBrush" Color="Black"/> 
      <SolidColorBrush x:Key="Circle4Fill" Color="Blue"/> 
      <SolidColorBrush x:Key="Circle3Fill" Color="Green"/> 
      <SolidColorBrush x:Key="Circle2Fill" Color="Yellow"/> 
      <SolidColorBrush x:Key="Circle1Fill" Color="White"/> 
      <SolidColorBrush x:Key="CircleStroke" Color="Black"/> 
    </ResourceDictionary> 
    <ResourceDictionary x:Key="HighContrastBlack"> 
       <SolidColorBrush x:Key="TargetBackground" Color="Black"/> 
       <SolidColorBrush x:Key="TargetBorderBrush" Color="White"/> 
       <SolidColorBrush x:Key="Circle4Fill" Color="Black"/> 
       <SolidColorBrush x:Key="Circle3Fill" Color="Black"/> 
       <SolidColorBrush x:Key="Circle2Fill" Color="Black"/> 
       <SolidColorBrush x:Key="Circle1Fill" Color="Black"/> 
       <SolidColorBrush x:Key="CircleStroke" Color="White"/> 
     </ResourceDictionary> 
     <ResourceDictionary x:Key="HighContrastWhite"> 
       <SolidColorBrush x:Key="TargetBackground" Color="White"/> 
       <SolidColorBrush x:Key="TargetBorderBrush" Color="Black"/> 
       <SolidColorBrush x:Key="Circle4Fill" Color="White"/> 
       <SolidColorBrush x:Key="Circle3Fill" Color="White"/> 
       <SolidColorBrush x:Key="Circle2Fill" Color="White"/> 
       <SolidColorBrush x:Key="Circle1Fill" Color="White"/> 
       <SolidColorBrush x:Key="CircleStroke" Color="Black"/> 
    </ResourceDictionary> 
    <ResourceDictionary x:Key="HighContrastCustom"> 
      <SolidColorBrush x:Key="TargetBackground" Color="{StaticResource SystemColorButtonFaceColor}"/> 
      <SolidColorBrush x:Key="TargetBorderBrush" Color="{StaticResource SystemColorButtonTextColor}"/> 
      <SolidColorBrush x:Key="Circle4Fill" Color="{StaticResource SystemColorHotlightColor}"/> 
      <SolidColorBrush x:Key="Circle3Fill" Color="{StaticResource SystemColorHotlightColor}"/> 
      <SolidColorBrush x:Key="Circle2Fill" Color="{StaticResource SystemColorHotlightColor}"/> 
      <SolidColorBrush x:Key="Circle1Fill" Color="{StaticResource SystemColorHotlightColor}"/> 
      <SolidColorBrush x:Key="CircleStroke" Color="{StaticResource SystemColorHighlightTextColor}"/> 
    </ResourceDictionary> 
  </ResourceDictionary.ThemeDictionaries>
</ResourceDictionary> 

C++、C#、または Visual Basic を使用する UWP アプリの開始 Microsoft Visual Studio テンプレートには、xaml ファイルの開始 MergedDictionaries 値である ThemeDictionaries ノードが含まれています。 すべての組み込みWindows ランタイム コントロールには、他の場所でハイ コントラスト テーマが既に定義されています (generic.xaml に相当するネイティブテーマ) か、システム テーマ リソースを使用してテーマに応答できるため、アプリ固有の ThemeDictionaries リソース セットの開始コンテンツは最小限に抑えられます。 カスタム コントロールまたはアプリ固有のテーマ スタイルの定義を開始した後にのみ、ここでさらに多くのリソース定義が表示されます。

<ResourceDictionary
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">

    <!-- Non-brush values that vary across themes -->

    <ResourceDictionary.ThemeDictionaries>
        <ResourceDictionary x:Key="Default">
            <x:String x:Key="BackButtonGlyph">&#xE071;</x:String>
            <x:String x:Key="BackButtonSnappedGlyph">&#xE0BA;</x:String>
        </ResourceDictionary>

        <ResourceDictionary x:Key="HighContrast">
            <x:String x:Key="BackButtonGlyph">&#xE0A6;</x:String>
            <x:String x:Key="BackButtonSnappedGlyph">&#xE0C4;</x:String>
        </ResourceDictionary>
    </ResourceDictionary.ThemeDictionaries>
...
</ResourceDictionary>

注釈

テーマ ディクショナリには、独自のアプリのリソースと、システムがテーマごとに提供するリソースという 2 つの主要なシナリオがあります。 App.xaml で独自のアプリ リソースを定義する場合にのみ、ThemeDictionaries リソース セットの値を設定する必要があります。 それ以外の場合、XAML コントロール テンプレートやその他の場所で使用する {ThemeResource} マークアップ拡張機能 の使用法は、通常、generic.xaml デザイン ファイル内のデザイン目的で表示できるシステム ThemeDictionaries リソースを参照します。

ブラシ リソースは、多くの場合、テーマ固有です。 既定Windows ランタイム XAML コントロール UI では、さまざまな既定の XAML コントロールに使用される多くのブラシ リソースが定義されています。 これらのリソース定義は、generic.xaml デザイン ファイルの一部として確認できます。 システム ThemeDictionaries 定義は、既定のコントロール テンプレート内から参照する {ThemeResource} マークアップ拡張の構文的に前方になるように、ファイルの早い段階にあります。 独自のページ定義とカスタム コントロール定義を使用すると、システム提供のテーマ リソースへの {ThemeResource} マークアップ拡張 参照を作成できます。 実際、既定のコントロールと同じ UI を使用することを意図したコントロールを記述する場合は、これが推奨される方法です。 既定のコントロールではテーマ リソースが広範囲に使用されており、独自のコントロールでテーマ リソースを使用すると、ユーザーが実行時にテーマを変更した場合や、特に設計されていないテーマでアプリが実行されている場合に、視覚的な不一致を防ぐことができます。

generic.xaml のシステム テーマ リソースには、既定のメジャーやフォント プロパティなど、ブラシ以外のリソースもあります。

個々のアプリに指定するテーマ ディクショナリは、アプリ テーマ全体のリソース定義を指定するためのものではありません。 代わりに、可能な限りシステム テーマ リソースを使用し、システムの既定値をオーバーライドする場合にアプリ固有のテーマ リソースを使用するように、ページ UI とカスタム コントロール定義を考慮する必要があります。 ページ レベルのアプリ UI では、通常、グリフやパスベースのグラフィックスなどの合成で使用される特定のブラシ以外のリソースに新しいテーマ リソースのみが必要です。 自分で定義する ThemeDictionaries のリソースは、アクセシビリティなどのシナリオを対象としています。 特に、ハイ コントラスト テーマにはさまざまなリソースが必要になる場合があります。 ハイ コントラスト シナリオの詳細については、「 ハイ コントラスト テーマ」を参照してください。 システム提供のテーマの詳細については、「 RequestedTheme または XAML で要求されたテーマのサンプル」を参照してください。

基本的なテーマに必要なキーは、"Light" と "Dark" です。

カスタム コントロールの場合は、"Light" と "Dark" のテーマディクショナリがある場合は常に、"HighContrast" キー付きテーマディクショナリも必要です。 他の名前付きハイ コントラスト テーマがありますが、"HighContrast" テーマ キーは、ハイ コントラストの他のテーマ リソースを使用できない場合に、ハイ コントラスト テーマを見つけるためにシステムが使用するフォールバックです。

カスタム コントロールの場合、"Light" テーマと "Dark" テーマをサポートせず、1 つのテーマと少なくとも 1 つの "HighContrast" テーマのみをサポートしている場合は、メインディクショナリの x:Key 属性を "Default" に変更できます。 "Default" は、指定したテーマ ("Dark" など) の ResourceDictionary が見つからない場合に使用される ResourceDictionary です。

ハイ コントラスト テーマとカスタム コントロール シナリオでは、システム ブラシ リソースに加えて、"SystemColorButtonFaceColor" などのシステム カラー リソースも用意されています。このリソースは、SolidColorBrush リソースの Color 値として割り当てることができます。 これらは、"HighContrast" テーマ ディクショナリと "Default" の値として使用できます。 コントロールがサポートするテーマごとにリソースが存在する場合、XAML テンプレートはアクティブなテーマに適したリソースを読み込みます。

適用対象

こちらもご覧ください