Устройства обычно включают светлые и темные темы, которые относятся к широкому набору настроек внешнего вида, которые можно задать на уровне операционной системы. Приложения должны соблюдать эти системные темы и реагировать немедленно при изменении системной темы.
Системная тема может измениться по различным причинам в зависимости от конфигурации устройства. Это включает в себя явно измененную пользователем системную тему, ее изменение в связи с временем дня и изменение из-за экологических факторов, таких как низкий свет.
Приложения пользовательского интерфейса многоплатформенных приложений .NET (.NET MAUI) могут реагировать на изменения системной темы, используя ресурсы с AppThemeBinding расширением разметки и SetAppThemeColorSetAppTheme<T> методами расширения.
Примечание
Приложения .NET MAUI могут реагировать на изменения системной темы в iOS 13 или более поздней версии, Android 10 (API 29) или более поздней версии, macOS 10.14 или более поздней версии, а также Windows 10 или более поздней версии.
На следующем снимка экрана показаны тематические страницы для светлой системной темы в iOS и темной системной темы в Android:
Определение и использование ресурсов темы
Ресурсы для светлых и темных тем можно использовать с расширением AppThemeBinding разметки и SetAppThemeColorSetAppTheme<T> методами расширения. С помощью этих подходов ресурсы автоматически применяются на основе значения текущей системной темы. Кроме того, объекты, использующие эти ресурсы, автоматически обновляются при изменении системной темы во время выполнения приложения.
Расширение разметки AppThemeBinding
Расширение AppThemeBinding разметки позволяет использовать ресурс, например изображение или цвет, на основе текущей системной темы.
DefaultobjectТип , который вы устанавливаете для ресурса, который будет использоваться по умолчанию.
LightobjectТип , который вы устанавливаете для ресурса, который будет использоваться, когда устройство использует его световую тему.
DarkobjectТипа, который вы задаете ресурсу, который будет использоваться при использовании устройства темной темы.
ValueobjectТип , который возвращает ресурс, который в настоящее время используется расширением разметки.
Примечание
Средство синтаксического анализа XAML позволяет сократить класс AppThemeBindingExtension как AppThemeBinding.
Свойство Default является свойством содержимого AppThemeBindingExtension. Поэтому для выражений разметки XAML, выраженных с фигурными скобками, можно исключить Default= часть выражения, указанную в первом аргументе.
В следующем примере XAML показано, как использовать расширение разметки AppThemeBinding :
XAML
<StackLayout><LabelText="This text is green in light mode, and red in dark mode."TextColor="{AppThemeBinding Light=Green, Dark=Red}" /><ImageSource="{AppThemeBinding Light=lightlogo.png, Dark=darklogo.png}" /></StackLayout>
В этом примере цвет текста первого Label имеет зеленый цвет, если устройство использует его световую тему и имеет красный цвет, если устройство использует темную тему. Аналогичным образом отображается Image другой файл изображения на основе текущей системной темы.
.NET MAUI включает SetAppThemeColor и SetAppTheme<T> методы расширения, позволяющие VisualElement объектам реагировать на изменения системной темы.
Метод SetAppThemeColor позволяет Color указывать объекты, которые будут заданы в целевом свойстве на основе текущей системной темы:
C#
Label label = new Label();
label.SetAppThemeColor(Label.TextColorProperty, Colors.Green, Colors.Red);
В этом примере для Label цвета текста устанавливается зеленый цвет, если устройство использует его световую тему и имеет красный цвет, если устройство использует свою темную тему.
Метод SetAppTheme<T> позволяет указывать объекты типа T , которые будут заданы в целевом свойстве на основе текущей системной темы:
C#
Image image = new Image();
image.SetAppTheme<FileImageSource>(Image.SourceProperty, "lightlogo.png", "darklogo.png");
В этом примере Image отображается lightlogo.png , когда устройство использует светлую тему и darklogo.png когда устройство использует темную тему.
Определение текущей системной темы
Текущая системная тема может быть обнаружена, получив значение Application.RequestedTheme свойства:
Свойство RequestedTheme возвращает AppTheme элемент перечисления. Перечисление AppTheme определяет следующие члены:
Unspecified, указывающий, что устройство использует неопределенную тему.
Light, указывающее, что устройство использует свою световую тему.
Dark, который указывает, что устройство использует свою темную тему.
Настройка текущей темы пользователя
Тема, используемая приложением, может быть задана со свойством Application.UserAppTheme , который имеет тип AppTheme, независимо от того, какая системная тема в настоящее время работает:
C#
Application.Current.UserAppTheme = AppTheme.Dark;
В этом примере приложение использует тему, определенную для системного темного режима, независимо от того, какая системная тема в настоящее время работает.
Примечание
UserAppTheme Задайте для свойства AppTheme.Unspecified значение по умолчанию для темы операционной системы.
Реагирование на изменения темы
Системная тема на устройстве может меняться по различным причинам в зависимости от того, как настроено устройство. Приложения .NET MAUI можно получать уведомления при изменении системной темы, обрабатывая Application.RequestedThemeChanged событие:
C#
Application.Current.RequestedThemeChanged += (s, a) =>
{
// Respond to the theme change
};
Объект AppThemeChangedEventArgs , который сопровождает RequestedThemeChanged событие, имеет одно свойство с именем RequestedThemeтипа AppTheme. Это свойство можно проверить для обнаружения запрошенной системной темы.
Важно!
Чтобы реагировать на изменения темы в Android, класс MainActivity должен включать ConfigChanges.UiMode флаг в Activity атрибут. Приложения .NET MAUI, созданные с помощью шаблонов проектов Visual Studio, автоматически включают этот флаг.
Совместная работа с нами на GitHub
Источник этого содержимого можно найти на GitHub, где также можно создавать и просматривать проблемы и запросы на вытягивание. Дополнительные сведения см. в нашем руководстве для участников.
Отзыв о .NET MAUI
.NET MAUI — это проект с открытым исходным кодом. Выберите ссылку, чтобы оставить отзыв:
Присоединитесь к серии встреч для создания масштабируемых решений искусственного интеллекта на основе реальных вариантов использования с другими разработчиками и экспертами.
Узнайте, как использовать статические и динамические общие ресурсы для создания пользовательского интерфейса многоплатформенного пользовательского интерфейса приложений .NET (MAUI). А также о том, как стили могут сделать пользовательский интерфейс более согласованным и доступным.
Их можно реализовать в приложениях .NET MAUI, создав ResourceDictionary для каждой темы, а затем загрузив ресурсы с расширением разметки DynamicResource.
Стили .NET MAUI позволяют настраивать внешний вид визуальных элементов. Стили определяются для определенного типа и содержат значения свойств, доступных в этом типе.
Класс цветов .NET MAUI в пространстве имен Microsoft.Maui.Graphics позволяет указать цвета в виде RGB-значений, значений HSL, значений HSV или с именем цвета.