Похоже, что для меня работа - это сначала создать все нужные мне темы и поместить их в собственный файл 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, поскольку ваш интерфейс в любом случае будет построен в этом фрейме.
Если кто-то знает о более сложном / подходящем подходе к этому, ПОЖАЛУЙСТА, дайте нам знать!