Могу ли я включить неограниченное количество пользовательских тем, кроме нескольких основных тем: Default, Light, Dark и HighContrast?(UWP) - PullRequest
0 голосов
/ 31 января 2019

Название объясняет большую часть этого.Но скажем, например, в меню «Настройки моих приложений» я разрешаю пользователю выбирать более 20 различных цветовых тем.Как мне реализовать такую ​​функцию, когда Windows 10 позволяет мне настраивать только определенное количество тем, таких как темы Default, Light, Dark и HighContrast?Свойство FrameworkElement.RequestedTheme не дает много опций для работы с простым и простым.Спасибо!

1 Ответ

0 голосов
/ 31 января 2019

Похоже, что для меня работа - это сначала создать все нужные мне темы и поместить их в собственный файл ResourceDictionary.xaml.Когда это сделано, и я хочу переключаться между темами, я просто создаю новый объект ResourceDictionary и затем устанавливаю его свойство Source для темы, которую я хочу загрузить.

Теперь значение x: Key, которое вы должны использовать ИСКЛЮЧИТЕЛЬНОдля этого подхода при добавлении пользовательских тем в ThemeDictionary используется значение ключа по умолчанию, а не значения светлого или темного ключа.Они будут вводить ограничения.

Таким образом, после загрузки вашей пользовательской темы во вновь созданный ResourceDictionary вы должны сначала удалить ResourceDictionary, в качестве связанного ключа которого используется «Default», из TheemeDictionary.Это потому, что вы не можете иметь несколько объектов в словаре с одним и тем же ключом.

Затем вы добавляете новый ResourceDictionary в ThemeDictionary вместо только что удаленного ThemeDictionary.Присвойте ему точно такой же ключ «По умолчанию».

Последнее, сделайте это:

if (this.RequestedTheme == ElementTheme.Light)
    this.RequestedTheme = ElementTheme.Dark;
else
    this.RequestedTheme = ElementTheme.Light;

Здесь вы переключаетесь между светлой и темной темами, чтобы вызвать изменение свойства (я полагаю, RequestedThemeсвойство требует значения, отличного от его текущего значения, для запуска события изменения свойства).Но поскольку у вас нет светлой или темной темы в ThemeDictionary, система по умолчанию вернется к имеющемуся у вас словарю тем по умолчанию.

И помните, что вы не можете изменить значение RequestedTheme для корневого приложения.класс, или вы получите ошибку во время выполнения.Хорошая хитрость заключается в том, чтобы просто изменить свойство RequestedTheme для фрейма rootFrame, поскольку ваш интерфейс в любом случае будет построен в этом фрейме.

Если кто-то знает о более сложном / подходящем подходе к этому, ПОЖАЛУЙСТА, дайте нам знать!

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