ResourceDictionary.ThemeDictionaries Propiedad

Definición

Obtiene una colección de diccionarios de recursos combinados que están específicamente clavedos y compuestos para abordar escenarios de tema, por ejemplo, proporcionando valores de tema para "HighContrast".

public:
 property IMap<Platform::Object ^, Platform::Object ^> ^ ThemeDictionaries { IMap<Platform::Object ^, Platform::Object ^> ^ get(); };
IMap<IInspectable, IInspectable const&> ThemeDictionaries();
public IDictionary<object,object> ThemeDictionaries { get; }
var iMap = resourceDictionary.themeDictionaries;
Public ReadOnly Property ThemeDictionaries As IDictionary(Of Object, Object)
<ResourceDictionary>
  <ResourceDictionary.ThemeDictionaries>
    oneOrMoreThemeDictionaries
  </ResourceDictionary.ThemeDictionaries>
</ResourceDictionary>

Valor de propiedad

IMap<Object,Object>

IDictionary<Object,Object>

IMap<Platform::Object,Platform::Object>

IMap<IInspectable,IInspectable>

Diccionario de diccionarios de temas ResourceDictionary . Cada debe tener una clave x :Key.

Ejemplos

En este ejemplo se muestra un diccionario ThemeDictionaries que define estilos de pincel para un tema "Predeterminado", dos temas "HighContrast*" existentes que se asignan a las opciones de tema de usuario para contraste alto y un tema de contraste alto personalizado. Una plantilla de control usa el diccionario para un control personalizado. Esto forma parte del ejemplo de contraste alto.

<ResourceDictionary>
  <ResourceDictionary.ThemeDictionaries> 
    <ResourceDictionary x:Key="Default"> 
      <SolidColorBrush x:Key="TargetBackground" Color="Red"/> 
      <SolidColorBrush x:Key="TargetBorderBrush" Color="Black"/> 
      <SolidColorBrush x:Key="Circle4Fill" Color="Blue"/> 
      <SolidColorBrush x:Key="Circle3Fill" Color="Green"/> 
      <SolidColorBrush x:Key="Circle2Fill" Color="Yellow"/> 
      <SolidColorBrush x:Key="Circle1Fill" Color="White"/> 
      <SolidColorBrush x:Key="CircleStroke" Color="Black"/> 
    </ResourceDictionary> 
    <ResourceDictionary x:Key="HighContrastBlack"> 
       <SolidColorBrush x:Key="TargetBackground" Color="Black"/> 
       <SolidColorBrush x:Key="TargetBorderBrush" Color="White"/> 
       <SolidColorBrush x:Key="Circle4Fill" Color="Black"/> 
       <SolidColorBrush x:Key="Circle3Fill" Color="Black"/> 
       <SolidColorBrush x:Key="Circle2Fill" Color="Black"/> 
       <SolidColorBrush x:Key="Circle1Fill" Color="Black"/> 
       <SolidColorBrush x:Key="CircleStroke" Color="White"/> 
     </ResourceDictionary> 
     <ResourceDictionary x:Key="HighContrastWhite"> 
       <SolidColorBrush x:Key="TargetBackground" Color="White"/> 
       <SolidColorBrush x:Key="TargetBorderBrush" Color="Black"/> 
       <SolidColorBrush x:Key="Circle4Fill" Color="White"/> 
       <SolidColorBrush x:Key="Circle3Fill" Color="White"/> 
       <SolidColorBrush x:Key="Circle2Fill" Color="White"/> 
       <SolidColorBrush x:Key="Circle1Fill" Color="White"/> 
       <SolidColorBrush x:Key="CircleStroke" Color="Black"/> 
    </ResourceDictionary> 
    <ResourceDictionary x:Key="HighContrastCustom"> 
      <SolidColorBrush x:Key="TargetBackground" Color="{StaticResource SystemColorButtonFaceColor}"/> 
      <SolidColorBrush x:Key="TargetBorderBrush" Color="{StaticResource SystemColorButtonTextColor}"/> 
      <SolidColorBrush x:Key="Circle4Fill" Color="{StaticResource SystemColorHotlightColor}"/> 
      <SolidColorBrush x:Key="Circle3Fill" Color="{StaticResource SystemColorHotlightColor}"/> 
      <SolidColorBrush x:Key="Circle2Fill" Color="{StaticResource SystemColorHotlightColor}"/> 
      <SolidColorBrush x:Key="Circle1Fill" Color="{StaticResource SystemColorHotlightColor}"/> 
      <SolidColorBrush x:Key="CircleStroke" Color="{StaticResource SystemColorHighlightTextColor}"/> 
    </ResourceDictionary> 
  </ResourceDictionary.ThemeDictionaries>
</ResourceDictionary> 

Las plantillas de Inicio de Microsoft Visual Studio para una aplicación para UWP con C++, C# o Visual Basic incluyen un nodo ThemeDictionaries en el archivo XAML que es el valor inicial de MergedDictionaries para un archivo app.xaml. Todos los controles de Windows Runtime integrados ya tienen temas de contraste alto definidos en otro lugar (el equivalente nativo de generic.xaml) o usan recursos de tema del sistema para que puedan responder a temas, por lo que el contenido inicial de un conjunto de recursos ThemeDictionaries específico de la aplicación es mínimo. Es solo una vez que empiece a definir controles personalizados o estilos de tema específicos de la aplicación que verá aquí más definiciones de recursos.

<ResourceDictionary
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">

    <!-- Non-brush values that vary across themes -->

    <ResourceDictionary.ThemeDictionaries>
        <ResourceDictionary x:Key="Default">
            <x:String x:Key="BackButtonGlyph">&#xE071;</x:String>
            <x:String x:Key="BackButtonSnappedGlyph">&#xE0BA;</x:String>
        </ResourceDictionary>

        <ResourceDictionary x:Key="HighContrast">
            <x:String x:Key="BackButtonGlyph">&#xE0A6;</x:String>
            <x:String x:Key="BackButtonSnappedGlyph">&#xE0C4;</x:String>
        </ResourceDictionary>
    </ResourceDictionary.ThemeDictionaries>
...
</ResourceDictionary>

Comentarios

Los diccionarios de temas tienen dos escenarios principales: recursos para su propia aplicación y recursos que el sistema proporciona por tema. Solo tendrás que establecer valores para el conjunto de recursos ThemeDictionaries si vas a definir tus propios recursos de aplicación en app.xaml. De lo contrario, los usos de extensión de marcado {ThemeResource} que se usarán en plantillas de control XAML y en otros lugares suelen hacer referencia a los recursos themeDictionaries del sistema, que se pueden ver con fines de diseño dentro del archivo de diseño generic.xaml.

Los recursos de pincel suelen ser específicos del tema. El valor predeterminado Windows Runtime interfaz de usuario de control XAML define muchos recursos de pincel que se usan para los distintos controles XAML predeterminados. Puede ver estas definiciones de recursos como parte del archivo de diseño generic.xaml. Las definiciones themeDictionaries del sistema se encuentran al principio del archivo, de modo que se reenvíen léxicamente de las extensiones de marcado {ThemeResource}que hacen referencia a ellas desde dentro de las plantillas de control predeterminadas. Sus propias definiciones de página y definiciones de control personalizadas pueden hacer referencias de extensión de marcado {ThemeResource} a los recursos de tema proporcionados por el sistema. De hecho, se recomienda escribir controles destinados a estar en la misma interfaz de usuario que los controles predeterminados. Los controles predeterminados usan ampliamente los recursos de tema y el uso de los recursos del tema en sus propios controles puede ayudar a evitar discrepancias visuales si el usuario cambia el tema en tiempo de ejecución, o si la aplicación se ejecuta en un tema para el que no había diseñado específicamente.

También hay recursos que no son pinceles en los recursos del tema del sistema en generic.xaml, como las medidas predeterminadas y las propiedades de fuente.

Los diccionarios de temas que especifique para las aplicaciones individuales no están diseñados para proporcionar la definición de recursos de un tema de aplicación completo. En su lugar, debe factorizar la interfaz de usuario de la página y las definiciones de control personalizadas para usar los recursos de tema del sistema siempre que sea posible y usar recursos de tema específicos de la aplicación para solo unos pocos casos en los que desea invalidar los valores predeterminados del sistema. En el caso de la interfaz de usuario de la aplicación de nivel de página, normalmente solo se necesitan nuevos recursos de tema para determinados recursos que no son pinceles usados en la composición, como glifos o gráficos basados en rutas de acceso. Los recursos de ThemeDictionaries que se definen están diseñados para escenarios como la accesibilidad. En concreto, es posible que se necesiten diferentes recursos para temas de contraste alto. Para obtener más información sobre el escenario de contraste alto, consulta Temas de contraste alto. Para obtener más información sobre los temas proporcionados por el sistema, consulta RequestedTheme o XAML requested theme sample (Ejemplo de tema solicitado de RequestedTheme o XAML).

Las claves esperadas para los temas básicos son "Light" y "Dark".

Para los controles personalizados, también debe tener un diccionario de temas con clave "HighContrast" siempre que tenga diccionarios de temas para "Light" y "Dark". Hay otros temas de contraste alto con nombre, pero la clave de tema "HighContrast" es la reserva que el sistema usa para buscar el tema de contraste alto si no hay otros recursos de tema para contraste alto disponibles.

Para los controles personalizados, si no admite temas "Light" y "Dark" y solo admite un tema, así como al menos un tema "HighContrast", puede cambiar el atributo x:Key del diccionario principal a "Default". "Default" es el ResourceDictionary que se usará si no se encuentra un ResourceDictionary en el tema especificado (por ejemplo, "Oscuro").

Para los temas de contraste alto y los escenarios de control personalizados, además de los recursos de pincel del sistema, también hay recursos de color del sistema como "SystemColorButtonFaceColor" que puede asignar como el valor color de los recursos de SolidColorBrush . Puede usarlos como valores para el diccionario de temas "HighContrast" y también "Default". Si el recurso existe para cada uno de los temas que admite el control, las plantillas XAML cargarán el recurso adecuado para el tema activo.

Se aplica a

Consulte también