Я занимаюсь разработкой приложения для Win 10 1809 и выше. Я заметил, что, начиная с 1809 года, появился новый API ColorPaletteResources
(это класс, наследующий от ResourceDictionary
), который можно легко установить в ресурсах App.Xaml для настройки цветовой схемы приложения, даже цвета Accent. сам по себе.
Теперь, если я использую его, как говорит Microsoft Docs, то есть в XAML ...
<Application.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<XamlControlsResources xmlns="using:Microsoft.UI.Xaml.Controls" />
<!-- Other merged dictionaries here -->
<ColorPaletteResources Accent="Yellow" AltHigh="BlueViolet" AltLow="Coral" AltMedium="DarkKhaki" AltMediumHigh="Aqua" AltMediumLow="DarkGreen" BaseHigh="Red" BaseLow="Gainsboro">
</ColorPaletteResources>
</ResourceDictionary.MergedDictionaries>
<!-- Other app resources here -->
</ResourceDictionary>
</Application.Resources>
... он прекрасно работает и он действительно красив (хотя в некоторых элементах управления некоторыецвет визуального состояния по-прежнему остается ненастроенным: некоторые кисти с наведением курсора по-прежнему принимают цвет акцента системы ... надеюсь, они это исправят), и вы даже можете указать одну цветовую палитру для каждой темы приложения. Еще один плюс заключается в том, что все эти палитры не взаимодействуют с темой «Высокий контраст», поэтому приложение будет иметь точное поведение, которого ожидает пользователь при настройке собственных цветов в настройках.
Проблема заключается в томColorPaletteResources
, похоже, не работает при установке его в коде во время выполнения.
Я действительно искал простой способ легко изменить все цвета приложения во время выполнения, и ядумал, наконец, нашел это ... но когда я пишу этот код в MainPage.xaml.cs ...
ColorPaletteResources palette = new ColorPaletteResources();
palette.Accent = Colors.Red;
App.Current.Resources.MergedDictionaries.Add(palette);
... ничего не происходит.
Вопросы для вас:
1) Я что-то не так делаю при определении ColorPaletteResources
в коде?
2) Есть ли лучший способ изменить Accent и все основные цвета приложения (те, что с "SystemControl"[...] Кисть ") без необходимости переопределять все шаблоны и стили в элементах управления?
Спасибо за ваше внимание и терпение.
С уважением
РЕДАКТИРОВАТЬ: Что касается использования этого нового API в XAML, я попробовалПалитра со всеми установленными цветовыми полями. Я только что скопировал более ранний фрагмент кода, поэтому проблема, связанная с тем, что некоторые кисти при наведении курсора по-прежнему принимают цвет System Accent, является реальной.
EDIT 2: я обнаружил, что установка ColorPaletteResources
в ресурсах приложения с помощью кода работаетв функции App.OnLaunched и, в общем, перед функцией InitializeComponent на каждой странице. Как я могу получить живой канал для цветов приложения, зная эту вещь?