2014-07-19 9 views

risposta

7

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.

3

Per controllare quale tema è attivo è possibile utilizzare RequestedTheme proprietà dell'oggetto Application MSDN

var isDark = Application.Current.RequestedTheme == ApplicationTheme.Dark;