Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to programatically check currently set theme in Windows Phone 8.1?

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).

like image 260
Vitalij Avatar asked Jul 19 '14 22:07

Vitalij


2 Answers

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.

like image 165
Romasz Avatar answered Oct 16 '22 02:10

Romasz


To check which theme is active you can use RequestedTheme property of the Application object MSDN

var isDark = Application.Current.RequestedTheme == ApplicationTheme.Dark;
like image 44
Viacheslav Smityukh Avatar answered Oct 16 '22 01:10

Viacheslav Smityukh