22 - Recursos de temas


Hemos visto que mediante StaticResource podemos acceder a recursos que se pueden encontrar en el mismo archivo o e un archivo externo.

Cuando utilizamos StaticResource se evalúa y recupera los valores de los recursos cuando se carga por primera vez el código XAML. No se actualiza. Es similar a buscar y reemplazar en el código XAML con el valor real en tiempo de ejecución en el inicio de la aplicación.

Hay otra forma de acceder a recursos mediante ThemeResource.

La evaluación de una extensión de marcado ThemeResource se produce cuando la aplicación se carga y, posteriormente, cada vez que el tema cambia en tiempo de ejecución. Esto suele ocurrir cuando el usuario cambia la configuración de su dispositivo.

Windows 10 propone 3 temas: Light, Dark y HighContrast. Desde el dispositivo el usuario puede seleccionar el tema y luego las aplicaciones que respetan estos temas automáticamente se adaptan los colores entre otras características.

Prueba de temas.

Como primer paso creamos un nuevo proyecto llamado "Proyecto30" seleccionando desde el menú de opciones del Visual Studio: Archivo -> Nuevo -> Proyecto

Pasemos a analizar el archivo MainPage.xaml:

<Page
    x:Class="Proyecto30.MainPage"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:local="using:Proyecto30"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    mc:Ignorable="d">

    <Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">

    </Grid>
</Page>

Para acceder a un tema debemos utilizar la palabra clave ThemeResource y seguidamente el nombre del recurso:

    <Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">

El recurso ApplicationPageBackgroundThemeBrush se encuentra en el archivo generic.xaml, podemos abrir dicho archivo presionando el botón derecho sobre el nombre del recurso y del menú que aparece seleccionar "Ir a definición".

Este archivo tiene más de 30000 líneas con la definición de recursos que podemos utilizar en nuestras aplicaciones.

            <SolidColorBrush x:Key="ApplicationPageBackgroundThemeBrush" Color="#FFFFFFFF" />

Pero si buscamos este recurso a lo largo del archivo generic.xaml lo vamos a encontrar en varios lugares:

    <ResourceDictionary.ThemeDictionaries>
        <ResourceDictionary x:Key="Default">           
            <SolidColorBrush x:Key="ApplicationPageBackgroundThemeBrush" Color="#FF000000" />
         .....                           
        <ResourceDictionary x:Key="Light">           
            <SolidColorBrush x:Key="ApplicationPageBackgroundThemeBrush" Color="#FFFFFFFF" />
         .....                           
        <ResourceDictionary x:Key="HighContrast">
            <SolidColorBrush x:Key="ApplicationPageBackgroundThemeBrush" Color="{ThemeResource SystemColorWindowColor}" />            

Se recupera según el tema que se encuentra activo en el dispositivo.

Si utilizamos los temas propuestos por Windows nuestra aplicación adaptará los colores según el tema que seleccione el usuario.

Este diccionario de recursos existe en la memoria como parte del mismo sistema operativo Windows en tiempo de ejecución y no se carga en forma particular para cada aplicación. Es decir los temas se comparten entre todas las aplicaciones que se ejecutan sobre el dispositivo

Retornar