Определение текущей темы в Windows Phone 7
Windows Phone 7 позволяет пользователю установить одну из тем – светлую или темную, а также задать цвет акцента. По задумке разработчиков WP7 в зависимости от этого выбора переопределяются и ресурсы приложения, а следовательно и приложение изменяет свой внешний вид. Из-за этого создаются ситуации, когда приложению необходимо определить какая тема на данный момент активна и в зависимости от этого, изменить логику. В этой заметке я покажу как можно определить текущую тему простым способом.
Определить текущую тему в Windows Phone 7 очень просто. Для этого достаточно обратиться к ресурсам — ОС сама устанавливает значения соответствующих ключей в зависимости от установки текущей темы. В нашем случае интересны два ключа в ресурсах – PhoneDarkThemeVisibility
и PhoneLightThemeVisibility
. Каждый из этих ключей содержит объекты типа Visibility
, которые устанавливаются в значение Visible
или Collapsed
в зависимости от того, какая тема сейчас установлена. Например, проверить установку темной темы можно следующим образом:
Visibility themeVisibility = (Visibility)Resources["PhoneDarkThemeVisibility"];
if (themeVisibility == Visibility.Visible)
{
// Dark theme
}
Такой способ не очень удобен для использования в различных частях приложения. Поэтому я создал небольшой класс, содержащий методы расширения объекта Application
:
public static class ThemeExtensions
{
public static bool IsDarkTheme(this Application app)
{
Visibility themeVisibility = (Visibility)app.Resources["PhoneDarkThemeVisibility"];
return themeVisibility == Visibility.Visible;
}
public static bool IsLightTheme(this Application app)
{
Visibility themeVisibility = (Visibility) app.Resources["PhoneLightThemeVisibility"];
return themeVisibility == Visibility.Visible;
}
}
Теперь для определения текущей темы можно использовать следующий код:
bool isDark = App.Current.IsDarkTheme();
bool isLight = App.Current.IsLightTheme();
Добавить комментарий