Voglio verificare se l'utente ha impostato un tema chiaro o scuro. È possibile farlo a livello di programmazione in Windows Phone 8.1 (app store).Come controllare in modo programmatico il tema attualmente impostato in Windows Phone 8.1?
risposta
Qui a MSDN troverete codici di esempio, che è possibile utilizzare per determinare il tema corrente, confrontando le risorse. Per esempio:
private bool IsDarkTheme()
{ return (double)Application.Current.Resources["PhoneDarkThemeOpacity"] > 0; }
Ma - ho enocuntered alcuni problemi che eseguono la riga sopra a WP8.1 runtime - non potrebbe trovare la chiave richiesto. Come si è scoperto - il codice sopra funzionerà only on WP8.1 Silverlight (also WP8.0).
Ma (ancora una volta), nulla si trova sulla strada to define your own ThemeResource e verificare che sia stato:
In app.xaml - definire alcuni 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>
Quindi è possibile utilizzare ad esempio un immobile nel codice:
public bool IsDarkTheme { get { return (bool)Application.Current.Resources["IsDarkTheme"]; } }
si noti inoltre che in alcuni casi potrebbe essere necessario verificare la presenza di HighContrast - in base a MSDN, è possibile farlo selezionando AccessibilitySettings class o estendere il proprio valore creato ThemeResource entro valori di Contrasto.
Per controllare quale tema è attivo è possibile utilizzare RequestedTheme proprietà dell'oggetto Application MSDN
var isDark = Application.Current.RequestedTheme == ApplicationTheme.Dark;