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).
问题:
回答1:
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.
回答2:
To check which theme is active you can use RequestedTheme property of the Application object MSDN
var isDark = Application.Current.RequestedTheme == ApplicationTheme.Dark;