I want to check if the user has set a light or dark theme. Is it possible to do so programmatically in Windows Phone 8.1 (store app).
Here at MSDN you will find sample codes, which you can use to determine the current theme - by comparing resources. For example:
private bool IsDarkTheme()
{ return (double)Application.Current.Resources["PhoneDarkThemeOpacity"] > 0; }
But - I've enocuntered some problems running the above line at WP8.1 Runtime - it couldn't find the requested key. As it turned out - the above code will work only on WP8.1 Silverlight (also WP8.0).
But (again), nothing stands on your way to define your own ThemeResource and check it's state:
In app.xaml - define some ThemeResources:
<Application.Resources>
<ResourceDictionary>
<ResourceDictionary.ThemeDictionaries>
<ResourceDictionary x:Key="Light">
<x:Boolean x:Key="IsDarkTheme">false</x:Boolean>
</ResourceDictionary>
<ResourceDictionary x:Key="Dark">
<x:Boolean x:Key="IsDarkTheme">true</x:Boolean>
</ResourceDictionary>
<ResourceDictionary x:Key="Default">
<x:Boolean x:Key="IsDarkTheme">false</x:Boolean>
</ResourceDictionary>
</ResourceDictionary.ThemeDictionaries>
</ResourceDictionary>
</Application.Resources>
Then you can use for example a property in your code:
public bool IsDarkTheme { get { return (bool)Application.Current.Resources["IsDarkTheme"]; } }
Note also that in some cases you may need to check for HighContrast - according to MSDN, you can do it by checking AccessibilitySettings class or extend your own created ThemeResource by HighContrast values.
To check which theme is active you can use RequestedTheme property of the Application object MSDN
var isDark = Application.Current.RequestedTheme == ApplicationTheme.Dark;
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With