Application.RequestedTheme Proprietà

Definizione

Ottiene o imposta un valore che determina la preferenza chiaro-scuro 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

In questo esempio viene illustrato come salvare il tema richiesto nelle impostazioni dell'app locale e quindi recuperarlo e applicarlo al riavvio dell'app.

Attenzione

Questo esempio semplificato dipende dall'ordine delle opzioni del pulsante di opzione corrispondenti ai ApplicationTheme valori di enumerazione: 0 = Luce, 1 = Scuro. Se si desidera inserirli in un ordine diverso o usare un'interfaccia utente diversa dai pulsanti di opzione, sarà necessario 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: "Luce" e "Scuro". Per impostazione predefinita, l'app viene eseguita usando il tema impostato dall'utente nelle impostazioni di Windows (Impostazioni > Personalizzazione > colori > scegliere la modalità app predefinita). È possibile impostare la proprietà dell'app per eseguire l'override dell'impostazione RequestedTheme predefinita dell'utente e specificare il tema usato. Se si specifica un'interfaccia utente per consentire all'utente di selezionare tema chiaro o scuro per l'app, è anche necessario fornire un'opzione per tornare all'uso predefinito, ovvero l'opzione selezionata nelle impostazioni di Personalizzazione di Windows.

Il tema può essere impostato solo quando l'app viene avviata, non mentre è in esecuzione. Il tentativo di impostazione RequestedTheme durante l'esecuzione dell'app genera un'eccezione (NotSupportedException per il codice .NET di Microsoft). Se si assegna 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 informazioni sulle impostazioni dell'app, vedere Archiviare e recuperare le impostazioni e altri dati dell'app.

È possibile modificare i valori dei temi specifici in fase di esecuzione dopo Application.RequestedTheme l'applicazione, se si usa la proprietà FrameworkElement.RequestedTheme e impostare i 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. Vedere Temi di contrasto e esempio a 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 ricalcocherà i valori delle risorse per qualsiasi utilizzo dell'estensione di markup {ThemeResource} . Risorse appropriate per il tema, ad esempio colori e pennelli, quindi usano i valori appropriati per il tema corrente, anche se non era l'app che richiedeva originariamente il tema.

Le risorse specifiche del tema sono in genere definite in un dizionario risorse separato in XAML. Questo dizionario risorse proviene dalla proprietà ThemeDictionary del resourceDictionary primario usato per i modelli di controllo.

Si applica a

Vedi anche