Linguaggio

Application.RequestedTheme Proprietà

Definizione

Ottiene o imposta un valore che determina la preferenza chiara-scura per il tema complessivo di un'app.

public:
 property ApplicationTheme RequestedTheme { ApplicationTheme get(); void set(ApplicationTheme value); };
ApplicationTheme RequestedTheme();

void RequestedTheme(ApplicationTheme value);
public ApplicationTheme RequestedTheme { get; set; }
var applicationTheme = application.requestedTheme;
application.requestedTheme = applicationTheme;
Public Property RequestedTheme As ApplicationTheme
<Application RequestedTheme="applicationThemeMemberName" .../>

Valore della proprietà

Valore dell'enumerazione . Il valore iniziale è il tema predefinito impostato dall'utente nelle impostazioni di Windows.

Esempio

Questo esempio mostra come salvare il tema richiesto nelle impostazioni dell'app locale e quindi recuperarlo e applicarlo al riavvio dell'app.

Caution

Questo esempio semplificato dipende dall'ordine delle opzioni del pulsante di opzione corrispondenti ai ApplicationTheme valori di enumerazione: 0 = Chiaro, 1 = Scuro. Se vuoi inserirli in un ordine diverso o usare un'interfaccia utente diversa dai pulsanti di opzione, dovrai modificare il codice di conseguenza.

<RadioButtons Header="App theme"
              SelectionChanged="AppTheme_SelectionChanged"
              Loaded="RadioButtons_Loaded">
    <x:String>Light</x:String>
    <x:String>Dark</x:String>
    <x:String>Use system setting</x:String>
</RadioButtons>
private void AppTheme_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
    if (sender is RadioButtons rb)
    {
        // Save theme choice to LocalSettings. 
        // ApplicationTheme enum values: 0 = Light, 1 = Dark
        ApplicationData.Current.LocalSettings.Values["themeSetting"] = rb.SelectedIndex;
    }
}

private void RadioButtons_Loaded(object sender, RoutedEventArgs e)
{
    if (sender is RadioButtons rb)
    {
        // Set the RadioButtons selection to the saved value.
        rb.SelectedIndex = (int)ApplicationData.Current.LocalSettings.Values["themeSetting"];
    }
}

App.xaml.cs

public App()
{
    this.InitializeComponent();

    // Get theme choice from LocalSettings.
    object value = ApplicationData.Current.LocalSettings.Values["themeSetting"];

    if (value != null)
    {
        // Apply theme choice if saved value is Light or Dark.
        // Otherwise, don't set it and the Windows Personalization setting is used. 
        if ((int)value == 0 || (int)value == 1)
        {
            App.Current.RequestedTheme = (ApplicationTheme)(int)value;
        }
    }
}

Commenti

Esistono due temi predefiniti: "Chiaro" e "Scuro". Per impostazione predefinita, l'app viene eseguita usando il tema impostato dall'utente nelle impostazioni di Windows (Impostazioni > Colori > personalizzazione > Scegliere la modalità app predefinita). Puoi impostare la proprietà dell'app RequestedTheme per eseguire l'override dell'impostazione predefinita dell'utente e specificare il tema usato. Se fornisci un'interfaccia utente per consentire all'utente di selezionare il tema chiaro o scuro per l'app, devi anche fornire un'opzione per tornare all'uso del valore predefinito, ovvero l'opzione selezionata nelle impostazioni di personalizzazione Windows.

Il tema può essere impostato solo all'avvio dell'app, non durante l'esecuzione. Il tentativo di impostare RequestedTheme mentre l'app è in esecuzione genera un'eccezione (NotSupportedException per Microsoft .NET codice). Se si offre all'utente un'opzione per selezionare un tema che fa parte dell'interfaccia utente dell'app, è necessario salvare l'impostazione nei dati dell'app e applicarla al riavvio dell'app. Per altre info sulle impostazioni dell'app, vedi Archiviare e recuperare le impostazioni e altri dati dell'app.

È possibile modificare valori di tema specifici in fase di esecuzione dopo Application.RequestedTheme l'applicazione, se si usa la proprietà FrameworkElement.RequestedTheme e si impostano valori su elementi specifici nell'interfaccia utente.

Esiste anche un tema "HighContrast" che usa i valori di sistema, ma le app e il codice dell'app usano una tecnica diversa per passare l'app a contrasto elevato. La RequestedTheme proprietà viene ignorata se l'utente è in esecuzione in modalità a contrasto elevato. Vedi l'esempio di contrasto dei temi e del contrasto elevato XAML.

Anche se l'app non può cambiare i temi in fase di esecuzione, l'utente può. Ad esempio, un utente potrebbe abilitare un tema a contrasto elevato durante l'esecuzione dell'app usando il tasto ALT+MAIUSC+PrtScn. In questo caso, il sistema di risorse XAML ricalcola i valori delle risorse per qualsiasi utilizzo dell'estensione di markup {ThemeResource} . Le risorse appropriate per il tema, ad esempio colori e pennelli, usano quindi i valori appropriati per il tema corrente, anche se non era l'app che richiedeva originariamente il tema.

Le risorse specifiche del tema vengono in genere definite in un dizionario risorse separato in XAML. Questo dizionario risorse deriva dalla proprietà ThemeDictionaries del ResourceDictionary primario usato per i modelli di controllo.

Si applica a

Vedi anche