ResourceDictionary.ThemeDictionaries 屬性
定義
重要
部分資訊涉及發行前產品,在發行之前可能會有大幅修改。 Microsoft 對此處提供的資訊,不做任何明確或隱含的瑕疵擔保。
取得合併資源字典的集合,這些字典特別針對主題案例進行索引鍵處理和撰寫,例如提供 「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>
屬性值
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# 或 Visual Basic 之 UWP app 的起始 Microsoft Visual Studio 範本會在 XAML 檔案中包含 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"></x:String>
<x:String x:Key="BackButtonSnappedGlyph"></x:String>
</ResourceDictionary>
<ResourceDictionary x:Key="HighContrast">
<x:String x:Key="BackButtonGlyph"></x:String>
<x:String x:Key="BackButtonSnappedGlyph"></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 中的資源適用於輔助功能等案例。 特別是,高對比度主題可能需要不同的資源。 如需高對比度案例的詳細資訊,請參閱 高對比度主題。 如需系統提供之主題的詳細資訊,請參閱 RequestedTheme 或 XAML 要求的主題範例。
基本主題的預期索引鍵為 「淺色」和「深色」。
針對自定義控件,每當您有 「Light」 和 「Dark」 的主題字典時,您也應該有 「HighContrast」 索引鍵主題字典。 還有其他具名的高對比度主題,但 「HighContrast」 主題索引鍵是系統用來尋找高對比度主題的後援,如果沒有其他高對比度的主題資源可供使用。
針對自定義控件,如果您不支援 「Light」 和 「Dark」 主題,而且只支援一個主題,以及至少一個 「HighContrast」 主題,您可以將主字典的 x:Key 屬性 變更為 “Default”。 “Default” 是 ResourceDictionary ,如果指定的主題中的 ResourceDictionary (例如找不到 “Dark”) ,將會使用。
對於高對比度主題和自定義控件案例,除了系統筆刷資源之外,還有系統色彩資源,例如 “SystemColorButtonFaceColor”,您可以指派為 SolidColorBrush 資源的 Color 值。 您可以使用這些作為 「HighContrast」 主題字典和 「Default」 的值。 如果控件支援的每個主題都有資源存在,XAML 範本會針對作用中的主題載入適當的資源。