API ColorPaletteResources в приложении UWP - Как установить ColorPaletteResources с собственными цветами в ресурсах приложения, по коду, а не только по Xaml? - PullRequest
0 голосов
/ 04 ноября 2019

Я занимаюсь разработкой приложения для 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 на каждой странице. Как я могу получить живой канал для цветов приложения, зная эту вещь?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...