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> 

Начальные шаблоны Microsoft Visual Studio для приложения Windows App SDK на C++ или C# включают ThemeDictionaries в XAML-файл узел, который является начальным значением MergedDictionaries для файла app.xaml. Все встроенные элементы управления среда выполнения 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>

Комментарии

Словари тем имеют два основных сценария: ресурсы для собственного приложения и ресурсы, которые система предоставляет для каждой темы. Вам потребуется задать значения для ThemeDictionaries набора ресурсов, только если вы определяете собственные ресурсы приложения в файле app.xaml. В противном случае использование расширения разметки {ThemeResource} , которое вы будете использовать в шаблонах элементов управления XAML и в других местах, обычно ссылается на системные ThemeDictionaries ресурсы, которые можно просмотреть в целях разработки в файле конструктора generic.xaml.

Ресурсы кистей часто зависят от темы. Пользовательский интерфейс элемента управления XAML по умолчанию среда выполнения Windows определяет множество ресурсов кисти, которые используются для различных элементов управления XAML по умолчанию. Эти определения ресурсов можно увидеть как часть файла конструктора generic.xaml. Системные ThemeDictionaries определения находятся на ранней стадии файла, поэтому они лексически передаются расширения разметки {ThemeResource}, ссылающиеся на них из шаблонов элементов управления по умолчанию. Собственные определения страниц и пользовательские определения элементов управления могут создавать ссылки на расширения разметки {ThemeResource} на предоставляемые системой ресурсы темы. На самом деле это рекомендуется, если вы пишете элементы управления, которые должны находиться в том же пользовательском интерфейсе, что и элементы управления по умолчанию. Элементы управления по умолчанию широко используют ресурсы темы, а использование ресурсов темы в ваших собственных элементах управления может помочь предотвратить визуальное несоответствие, если пользователь изменяет тему во время выполнения или если приложение выполняется под темой, для которой вы не разрабатывали специально.

В ресурсах системной темы в generic.xaml также есть ресурсы, не относящиеся к кисти, например меры по умолчанию и свойства шрифта.

Словари тем, указанные для отдельных приложений, не предназначены для предоставления определения ресурса для всей темы приложения. Вместо этого следует учитывать пользовательский интерфейс страницы и пользовательские определения элементов управления, чтобы по возможности использовать ресурсы системной темы, а также использовать ресурсы темы для конкретного приложения в нескольких случаях, когда требуется переопределить системные значения по умолчанию. Для пользовательского интерфейса приложения на уровне страницы обычно требуются только новые ресурсы темы для некоторых ресурсов, не относящихся к кисти, используемых в композиции, таких как глифы или графики на основе пути. Ресурсы, ThemeDictionaries которые вы определяете самостоятельно, предназначены для таких сценариев, как специальные возможности. В частности, для тем с высокой контрастностью могут потребоваться различные ресурсы. Дополнительные сведения о сценарии высокой контрастности см. в разделе Темы с высокой контрастностью. Дополнительные сведения о системных темах см. в разделе RequestedTheme или xaml requested theme sample.

Ожидаемые клавиши для основных тем: Light и Dark.

Для пользовательских элементов управления вы также должны иметь словарь тем с ключами HighContrast всякий раз, когда у вас есть словари тем для "Light" и "Dark". Существуют и другие темы с высокой контрастностью, но ключ темы HighContrast — это резервный вариант, который система использует для поиска темы с высокой контрастностью, если другие ресурсы темы для высокой контрастности не доступны.

Для пользовательских элементов управления, если вы не поддерживаете темы "Light" и "Dark" и поддерживаете только одну тему, а также хотя бы одну тему HighContrast, вы можете изменить атрибут x:Key словаря main на "Default". "Default" — это ResourceDictionary , который будет использоваться, если не удается найти ResourceDictionary в указанной теме (например, "Dark").

Для тем с высокой контрастностью и пользовательских сценариев управления, помимо системных ресурсов кисти, существуют также системные ресурсы цвета, такие как SystemColorButtonFaceColor, которым можно назначить значение Color для ресурсов SolidColorBrush . Их можно использовать в качестве значений для словаря темы HighContrast, а также для словаря по умолчанию. Если ресурс существует для каждой из тем, поддерживаемых вашим элементом управления, шаблоны XAML загрузят соответствующий ресурс для активной темы.

Применяется к

См. также раздел