Application.RequestedTheme Propiedad

Definición

Obtiene o establece un valor que determina la preferencia de oscuridad clara para el tema general de una aplicación.

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" .../>

Valor de propiedad

Valor de la enumeración. El valor inicial es el tema predeterminado establecido por el usuario en la configuración de Windows.

Ejemplos

En este ejemplo se muestra cómo guardar el tema solicitado en la configuración de la aplicación local y, a continuación, recuperarlo y aplicarlo cuando se reinicie la aplicación.

Precaución

Este ejemplo simplificado depende del orden de las opciones del botón de radio que coincidan con los ApplicationTheme valores de enumeración: 0 = Claro, 1 = Oscuro. Si desea colocarlos en un orden diferente o usar una interfaz de usuario distinta de los botones de radio, necesitará modificar el código en consecuencia.

<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;
        }
    }
}

Comentarios

Hay dos temas integrados: "Claro" y "Oscuro". De forma predeterminada, la aplicación se ejecuta con el tema establecido por el usuario en la configuración de Windows (Configuración > Colores > de personalización > Elija el modo de aplicación predeterminado). Puede establecer la propiedad de la aplicación para invalidar el valor predeterminado del RequestedTheme usuario y especificar qué tema se usa. Si proporcionas una interfaz de usuario para permitir al usuario seleccionar tema claro u oscuro para la aplicación, también debes proporcionar una opción para volver a usar el valor predeterminado, es decir, la opción seleccionada en la configuración de personalización de Windows.

El tema solo se puede establecer cuando se inicia la aplicación, no mientras se ejecuta. Si se intenta establecer RequestedTheme mientras se ejecuta la aplicación, se produce una excepción (NotSupportedException para el código de Microsoft .NET). Si proporcionas al usuario una opción para elegir un tema que forma parte de la interfaz de usuario de la aplicación, debes guardar la configuración en los datos de la aplicación y aplicarlo cuando se reinicie la aplicación. (Para obtener más información sobre la configuración de la aplicación, consulta Almacenar y recuperar la configuración y otros datos de la aplicación).

Puede cambiar los valores de tema específicos en tiempo de ejecución después Application.RequestedTheme de aplicarse, si usa la propiedad FrameworkElement.RequestedTheme y establece valores en elementos específicos de la interfaz de usuario.

También hay un tema "HighContrast" que usa valores del sistema, pero las aplicaciones y el código de la aplicación usan una técnica diferente para cambiar la aplicación a contraste alto. La RequestedTheme propiedad se omite si el usuario se ejecuta en modo de contraste alto. Consulta Contraste de temas y ejemplo de contraste alto XAML.

Aunque la aplicación no puede cambiar los temas en tiempo de ejecución, el usuario puede. Por ejemplo, un usuario podría habilitar un tema de contraste alto mientras se ejecuta la aplicación, mediante el método abreviado de teclas Alt+Mayús+PrtScn. Si esto sucede, el sistema de recursos XAML volverá a calcular los valores de recursos para cualquier uso de extensión de marcado {ThemeResource} . Los recursos adecuados para el tema, como los colores y los pinceles, usan los valores adecuados para el tema actual, aunque no fuera la aplicación que solicitó ese tema originalmente.

Los recursos específicos del tema se definen normalmente en un diccionario de recursos independiente en XAML. Este diccionario de recursos procede de la propiedad ThemeDictionaries del resourceDictionary principal que se usa para las plantillas de control.

Se aplica a

Consulte también