Переопределить тему кисти Windows 10 UWP
Я пытаюсь переопределить некоторые цвета стиля в Windows 10, но я не могу заставить его работать.
Мое приложение app.xaml выглядит так:
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="Resources.xaml"/>
</ResourceDictionary.MergedDictionaries>
<ResourceDictionary.ThemeDictionaries>
<ResourceDictionary x:Key="Default" Source="Theme.xaml"/>
</ResourceDictionary.ThemeDictionaries>
</ResourceDictionary>
</Application.Resources>
И мой Theme.xaml выглядит так
<ResourceDictionary
x:Key="Default"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<SolidColorBrush x:Key="ListBoxBackgroundThemeBrush" Color="Transparent" />
<SolidColorBrush x:Key="ListBoxFocusBackgroundThemeBrush" Color="Transparent" />
<SolidColorBrush x:Key="ListBoxItemPressedBackgroundThemeBrush" Color="Transparent" />
<SolidColorBrush x:Key="ListBoxItemSelectedForegroundThemeBrush" Color="Transparent" />
<SolidColorBrush x:Key="ListBoxItemSelectedBackgroundThemeBrush" Color="Transparent" />
<SolidColorBrush x:Key="FocusVisualBlackStrokeThemeBrush" Color="Transparent" />
<SolidColorBrush x:Key="ScrollBarButtonForegroundThemeBrush" Color="Red" />
<SolidColorBrush x:Key="ScrollBarPanningBackgroundThemeBrush" Color="Red" />
<SolidColorBrush x:Key="ButtonPressedBackgroundThemeBrush" Color="White"/>
<SolidColorBrush x:Key="SearchBoxHitHighlightSelectedForegroundThemeBrush" Color="Red"/>
<SolidColorBrush x:Key="SearchBoxHitHighlightForegroundThemeBrush" Color="Pink"/>
Однако он не работает, он нигде не отменяет стиль.
Ответы
Ответ 1
Стили, которые вы устанавливаете, предназначены для приложений Windows 8. Стили, используемые универсальными приложениями Windows, значительно упрощены.
Самый простой способ найти их - добавить свой ListBox на страницу, щелкнуть правой кнопкой мыши по нему в дизайнере и выбрать "Редактировать шаблон"... Создайте копию шаблона и посмотрите на используемые имена.
Все элементы управления теперь используют по возможности одни и те же кисти, а не специфичные для управления.
Например, ListBox использует следующие кисти для своего Foreground, Background и BorderBrush:
- SystemControlForegroundBaseHighBrush
- SystemControlBackgroundChromeMediumLowBrush
- SystemControlForegroundBaseHighBrush
Ответ 2
Чтобы добавить ответ Роба, для тех, кто ищет более широкий отклик в приложении, он помог мне найти полные темы по умолчанию, которые доступны в
\(Program Files)\Windows Kits\10\DesignTime\CommonConfiguration\Neutral\UAP\<SDK version>\Generic folder
установки Windows SDK, в themeresources.xaml.
В этом есть ResourceDictionary для Default, HighContrast и Light. Клавиша по умолчанию обрабатывает тему Dark в UWP, так как это то, что будет по умолчанию, если не найден ни один "Dark" ResourceDictionary по умолчанию.
Темы Default и Light имеют почти 1000 цветов, специфичных для управления, или более общие цвета "SystemControlForeground...", такие как Rob, но в UWP они в основном основаны на следующих 25 цветовых категориях
- 24 системных цвета
-
SystemAccentColor
, определяемый пользователем общий цвет, который UWP-документы имеют целую страницу в разделе "Дизайн и интерфейс" > "Стиль" > "Цвет"
- Там 6 более светлых и темных оттенков выше (
SystemAccentColorLight1
, ...Dark1
и т.д.), но они не используются в словарях ресурсов по умолчанию. Однако .6,.8 и .9 непрозрачности этого цвета используются несколько раз, используются только временные непрозрачности.
Затем есть еще 300 категорий цветов из Windows 8.1, которые остаются в списке, которые вручную выбирают определенный цвет, в пределах которого вы можете видеть здесь
Единственное исключение из вышеизложенного заключается в том, что стиль InkToolBar почти исключительно получается из цветов High Contrast.
Тема с высоким контрастом, сильно тянет из 8 дополнительных систем. [blank] Цвета, которые, подобно SystemAccentColor
, являются значениями всей ОС. Они определяются шаблонами и/или пользователем, если они выбрали тему с высоким контрастом, которая является опцией Windows 10 в настройках персонализации. Высокая контрастность также является функцией доступности, поэтому я думаю, что я избегу переопределять этот ResourceDictionary, независимо от того, брендинг приложения.
Но эффективно, переопределяя цвета SystemAccentColor
и 24 System [blank] в структуре XAML, вы можете последовательно изменять сотню определенных цветовых решений в приложении.