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 для приложения UWP на C++, C# или Visual Basic включают в XAML-файл узел ThemeDictionaries, который является начальным значением 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 загрузят соответствующий ресурс для активной темы.

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

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