How to programatically check currently set theme i

2019-01-26 12:15发布

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

2条回答
混吃等死
2楼-- · 2019-01-26 13:03

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

var isDark = Application.Current.RequestedTheme == ApplicationTheme.Dark;
查看更多
祖国的老花朵
3楼-- · 2019-01-26 13:05

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.

查看更多
登录 后发表回答