ResourceDictionary.ThemeDictionaries Propriété

Définition

Obtient une collection de dictionnaires de ressources fusionnés qui sont spécifiquement keyisés et composés pour répondre aux scénarios de thème, par exemple en fournissant des valeurs de thème pour « 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>

Valeur de propriété

IMap<Object,Object>

IDictionary<Object,Object>

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

IMap<IInspectable,IInspectable>

Dictionnaire de dictionnaires de thèmes ResourceDictionary . Chaque clé doit être clé avec x :Key.

Exemples

Cet exemple montre un dictionnaire ThemeDictionaries qui définit des styles de pinceau pour un thème « Par défaut », deux thèmes « HighContrast* » existants qui correspondent aux choix de thèmes utilisateur pour un contraste élevé et un thème à contraste élevé personnalisé. Le dictionnaire est utilisé par un modèle de contrôle pour un contrôle personnalisé. Cela fait partie de l’exemple contraste élevé.

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

Les modèles Microsoft Visual Studio de démarrage pour une application UWP en C++, C# ou Visual Basic incluent un nœud ThemeDictionaries dans le fichier XAML qui est la valeur MergedDictionaries de départ pour un fichier app.xaml. Tous les contrôles de Windows Runtime intégrés ont déjà des thèmes à contraste élevé définis ailleurs (l’équivalent natif de generic.xaml) ou utilisent des ressources de thème système afin qu’ils puissent répondre aux thèmes, de sorte que le contenu de départ d’un jeu de ressources ThemeDictionaries spécifique à l’application est minimal. Ce n’est qu’une fois que vous commencez à définir des contrôles personnalisés ou des styles de thème spécifiques à l’application que vous verrez d’autres définitions de ressources ici.

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

Remarques

Les dictionnaires de thèmes ont deux scénarios principaux : les ressources pour votre propre application et les ressources que le système fournit pour vous sur une base par thème. Vous devez uniquement définir des valeurs pour l’ensemble de ressources ThemeDictionaries si vous définissez vos propres ressources d’application dans app.xaml. Sinon, les utilisations de l’extension de balisage {ThemeResource} que vous utiliserez dans les modèles de contrôle XAML et ailleurs font généralement référence aux ressources ThemeDictionaries système, qui peuvent être affichées à des fins de conception dans le fichier de conception generic.xaml.

Les ressources brush sont souvent spécifiques au thème. L’interface utilisateur du contrôle XAML par défaut Windows Runtime définit de nombreuses ressources de pinceau utilisées pour les différents contrôles XAML par défaut. Vous pouvez voir ces définitions de ressources dans le fichier de conception generic.xaml. Les définitions du système ThemeDictionaries sont situées au début du fichier, de sorte qu’elles sont lexicalement vers l’avant des extensions de balisage {ThemeResource}qui les référencent à partir des modèles de contrôle par défaut. Vos propres définitions de page et définitions de contrôle personnalisés peuvent faire des références d’extension de balisage {ThemeResource} aux ressources de thème fournies par le système. En fait, il s’agit d’une pratique recommandée si vous écrivez des contrôles destinés à se trouver dans la même interface utilisateur que les contrôles par défaut. Les contrôles par défaut utilisent largement les ressources de thème, et l’utilisation des ressources de thème dans vos propres contrôles peut aider à éviter les incompatibilités visuelles si l’utilisateur modifie le thème au moment de l’exécution ou si l’application s’exécute sous un thème pour lequel vous n’avez pas spécialement conçu.

Il existe également des ressources non-pinceau dans les ressources de thème système dans generic.xaml, telles que les mesures par défaut et les propriétés de police.

Les dictionnaires de thèmes que vous spécifiez pour des applications individuelles ne sont pas destinés à fournir la définition de ressource d’un thème d’application entier. Au lieu de cela, vous devez factoriser l’interface utilisateur de votre page et les définitions de contrôle personnalisé pour utiliser des ressources de thème système dans la mesure du possible, et pour utiliser des ressources de thème spécifiques à l’application dans quelques cas où vous souhaitez remplacer les valeurs système par défaut. Pour l’interface utilisateur de l’application au niveau de la page, vous n’avez généralement besoin que de nouvelles ressources de thème pour certaines ressources autres que le pinceau utilisées dans la composition, telles que les glyphes ou les graphiques basés sur des chemins d’accès. Les ressources dans ThemeDictionaries que vous définissez vous-même sont destinées à des scénarios tels que l’accessibilité. En particulier, différentes ressources peuvent être nécessaires pour les thèmes à contraste élevé. Pour plus d’informations sur le scénario de contraste élevé, consultez Thèmes à contraste élevé. Pour plus d’informations sur les thèmes fournis par le système, consultez RequestedTheme ou XAML requested theme sample.

Les clés attendues pour les thèmes de base sont « Light » et « Dark ».

Pour les contrôles personnalisés, vous devez également disposer d’un dictionnaire de thèmes à clé « HighContrast » chaque fois que vous avez des dictionnaires de thèmes pour « Clair » et « Sombre ». Il existe d’autres thèmes à contraste élevé nommés, mais la clé de thème « HighContrast » est la méthode de secours que le système utilise pour trouver le thème à contraste élevé si aucune autre ressource de thème pour le contraste élevé n’est disponible.

Pour les contrôles personnalisés, si vous ne prenez pas en charge les thèmes « Clair » et « Sombre » et que vous ne prenez en charge qu’un seul thème ainsi qu’au moins un thème « HighContrast », vous pouvez modifier l’attribut x :Key de votre dictionnaire de main en « Default ». « Default » est le ResourceDictionary qui sera utilisé si un ResourceDictionary dans le thème spécifié (tel que « Sombre ») est introuvable.

Pour les thèmes à contraste élevé et les scénarios de contrôle personnalisé, outre les ressources de pinceau système, il existe également des ressources de couleur système telles que « SystemColorButtonFaceColor » que vous pouvez affecter à la valeur Color des ressources SolidColorBrush . Vous pouvez les utiliser comme valeurs pour votre dictionnaire de thèmes « HighContrast » et également comme « Default ». Si la ressource existe pour chacun des thèmes pris en charge par votre contrôle, les modèles XAML chargent la ressource appropriée pour le thème actif.

S’applique à

Voir aussi