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>

資源 字典 主題字典的詞典。 每個都必須以 x:Key 來標記。

範例

這個範例展示了一個 ThemeDictionaries 字典,定義了「預設」主題的筆刷風格、兩個現有的「高對比*」主題(對應到使用者高對比主題選擇),以及一個自訂的高對比主題。 字典用於自訂控制的控制範本。 這是 高對比度樣本的一部分。

<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一個節點,該節點是 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 控制介面定義了許多用於各種預設 XAML 控制項的刷子資源。 你可以在 generic.xaml 設計檔案中看到這些資源定義。 系統 ThemeDictionaries 定義位於檔案的前端,使其詞彙上排在 {ThemeResource} 標記擴展s 之前,這些標記擴展名是從預設控制範本中引用它們的。 你自己的頁面定義和自訂控制定義可以讓 {ThemeResource} 標記擴充 功能參考系統提供的主題資源。 事實上,如果你寫的控制項是設定在與預設控制項相同的介面中,這是建議的做法。 預設控制是大量使用主題資源,而在自己的控制項中使用主題資源,可以避免使用者執行時更換主題,或應用程式在你未特別設計的主題下運行時,造成視覺不匹配。

系統中 generic.xaml 的主題資源中也有非刷子資源,例如預設度量與字型屬性。

你為個別應用程式指定的主題字典,並非用來提供整個應用程式主題的資源定義。 相反地,你應該考慮頁面介面和自訂控制定義,盡可能使用系統主題資源,並且在少數想覆蓋系統預設值的情況下,使用應用程式專屬的主題資源。 對於頁面層級的應用程式介面,通常只需要針對某些非筆刷資源(如字形或路徑圖形)新增主題資源。 你自己定義的資源 ThemeDictionaries 是針對無障礙等情境設計的。 特別是,對於高對比主題,可能需要不同的資源。 欲了解更多高對比情境資訊,請參見 高對比主題。 欲了解更多系統提供主題的資訊,請參閱 RequestedThemeXAML requested theme 範例

基本主題的預期調性為「光明」與「黑暗」。

自訂控制方面,當你有「Light」和「Dark」主題字典時,也應該有一個「HighContrast」鍵主題字典。 還有其他命名的高對比主題,但「高對比」主題鍵是系統在沒有其他高對比主題資源時用來尋找高對比主題的備用工具。

對於自訂控制項,如果你不支援「Light」和「Dark」主題,且只支援一個主題以及至少一個「HighContrast」主題,你可以將主字典的 x:Key 屬性 改成「Default」。 「預設」是當找不到指定主題(如「暗色」)的資源字典時所用的 ResourceDictionary

針對高對比主題與自訂控制情境,除了系統筆刷資源外,還有系統色彩資源如「SystemColorButtonFaceColor」,可將它們指派為 SolidColorBrush 資源的色彩值。 你可以把這些數值當作「HighContrast」主題字典和「預設」的值。 如果你的控制項支援的每個主題都有資源,XAML 範本會載入該主題的適當資源。

適用於

另請參閱