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# 或 Visual Basic 的 UWP 应用的起始 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">&#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 请求的主题示例

基本主题的预期键为“浅色”和“深色”。

对于自定义控件,每当具有“浅色”和“深色”主题字典时,还应具有“HighContrast”键控主题字典。 还有其他命名的高对比度主题,但“HighContrast”主题键是系统用于查找高对比度主题(如果没有其他高对比度主题资源可用)的回退。

对于自定义控件,如果不支持“浅色”和“深色”主题,并且仅支持一个主题以及至少一个“HighContrast”主题,则可以将main字典的 x:Key 属性更改为“Default”。 “Default”是找不到指定主题 (中的 ResourceDictionary(如“深色”) )时将使用的 ResourceDictionary

对于高对比度主题和自定义控件方案,除了系统画笔资源外,还有一些系统颜色资源,例如“SystemColorButtonFaceColor”,你可以将其指定为 SolidColorBrush 资源的 Color 值。 可以将这些用作“HighContrast”主题字典和“Default”的值。 如果控件支持的每个主题都存在资源,则 XAML 模板将为处于活动状态的主题加载相应的资源。

适用于

另请参阅