Share via


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 現有的「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# 之Windows 應用程式 SDK應用程式的起始 Microsoft Visual Studio 範本包含 ThemeDictionaries XAML 檔案中的節點,該節點是 app.xaml 檔案的起始MergedDictionaries值。 所有內建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>

備註

主題字典有兩個主要案例:您自己的應用程式資源,以及系統針對每個主題提供的資源。 如果您在 app.xaml 中定義自己的應用程式資源, ThemeDictionaries 您只需要設定資源集的值。 否則,您將會在 XAML 控制項範本中使用的 {ThemeResource} 標記延伸 使用方式,而其他位置通常會參考系統 ThemeDictionaries 資源,這可以在 generic.xaml 設計檔中針對設計目的進行檢視。

筆刷資源通常是主題特定的。 預設Windows 執行階段 XAML 控制項 UI 會定義許多用於各種預設 XAML 控制項的筆刷資源。 您可以在 generic.xaml 設計檔中看到這些資源定義。 系統 ThemeDictionaries 定義位於檔案早期,因此它們會以語彙方式轉送 {ThemeResource} 標記延伸,從預設控制項範本中參考它們。 您自己的頁面定義和自訂控制項定義可以對系統提供的主題資源進行 {ThemeResource} 標記延伸 參考。 事實上,如果您要撰寫要與預設控制項位於相同 UI 中的控制項,這是建議的做法。 預設控制項會廣泛地使用主題資源,而且在您自己的控制項中使用主題資源,可協助防止使用者在執行時間變更主題,或應用程式是在您未特別設計的主題下執行時,防止視覺效果不符。

generic.xaml 的系統主題資源也有非筆刷資源,例如預設量值和字型屬性。

您為個別應用程式指定的主題字典並非用來提供整個應用程式主題的資源定義。 相反地,您應該考慮頁面 UI 和自訂控制項定義,盡可能使用系統主題資源,並只針對您想要覆寫系統預設值的幾個案例使用應用程式特定的主題資源。 針對頁面層級應用程式 UI,您通常只需要用於組合的特定非筆刷資源的新主題資源,例如字元或路徑型圖形。 您自行定義的資源 ThemeDictionaries 適用于協助工具等案例。 特別是,高對比主題可能需要不同的資源。 如需高對比案例的詳細資訊,請參閱 高對比主題。 如需系統提供之主題的詳細資訊,請參閱 RequestedThemeXAML 要求的主題範例

基本主題的預期索引鍵為「淺色」和「深色」。

針對自訂控制項,每當有 「Light」 和 「Dark」 的主題字典時,您也應該有 「HighContrast」 索引鍵主題字典。 有其他具名的高對比主題,但 「HighContrast」 主題索引鍵是系統用來尋找高對比主題的後援,如果沒有其他高對比的主題資源可供使用。

針對自訂控制項,如果您不支援 「Light」 和 「Dark」 主題,而且只支援一個主題,以及至少一個 「HighContrast」 主題,您可以將主字典的 x:Key 屬性 變更為 「Default」。 「Default」 是 ResourceDictionary ,如果指定的主題中的 ResourceDictionary (,例如找不到 「Dark」) ,將會使用。

對於高對比主題和自訂控制項案例,除了系統筆刷資源之外,還有系統色彩資源,例如 「SystemColorButtonFaceColor」,您可以指派為SolidColorBrush資源的Color值。 您可以使用這些作為 「HighContrast」 主題字典和 「Default」 的值。 如果控制項支援的每個主題都有資源存在,XAML 範本將會針對作用中的主題載入適當的資源。

適用於

另請參閱