Condividi tramite


ResourceDictionary.ThemeDictionaries Proprietà

Definizione

Ottiene una raccolta di dizionari risorse uniti con chiave e composti in modo specifico per gestire gli scenari del tema, ad esempio fornendo i valori del tema per "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>

Valore della proprietà

IMap<Object,Object>

IDictionary<Object,Object>

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

IMap<IInspectable,IInspectable>

Dizionario dei dizionari dei temi ResourceDictionary . Ogni chiave deve essere con chiave x:Key.

Esempio

In questo esempio viene illustrato un ThemeDictionaries dizionario che definisce gli stili del pennello per un tema "Default", due temi "HighContrast*" esistenti che eseguono il mapping alle scelte del tema utente per il contrasto elevato e un tema a contrasto elevato personalizzato. Il dizionario viene usato da un modello di controllo per un controllo personalizzato. Fa parte dell'esempio a contrasto elevato.

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

I modelli di Microsoft Visual Studio iniziali per un'app SDK per app di Windows che usano C++ o C# includono un ThemeDictionaries nodo nel file XAML che rappresenta il valore MergedDictionaries iniziale per un file app.xaml. Tutti i controlli di Windows Runtime predefiniti hanno già temi a contrasto elevato definiti altrove (l'equivalente nativo di generic.xaml) o usano risorse del tema di sistema in modo che possano rispondere ai temi, in modo che il contenuto iniziale di un set di risorse specifico ThemeDictionaries dell'app sia minimo. È solo dopo aver iniziato a definire controlli personalizzati o stili di tema specifici dell'app che verranno visualizzate altre definizioni di risorse qui.

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

Commenti

I dizionari dei temi hanno due scenari principali: le risorse per la propria app e le risorse fornite dal sistema in base al tema. Dovrai impostare i valori per il ThemeDictionaries set di risorse solo se definisci le tue risorse dell'app in app.xaml. In caso contrario, gli utilizzi dell'estensione di markup {ThemeResource} che userai nei modelli di controllo XAML e altrove fanno in genere riferimento alle risorse di sistema ThemeDictionaries , che possono essere visualizzate a scopo di progettazione all'interno del file di progettazione generic.xaml.

Le risorse pennello sono spesso specifiche del tema. L'interfaccia utente del controllo XAML Windows Runtime predefinita definisce molte risorse pennello usate per i vari controlli XAML predefiniti. È possibile visualizzare queste definizioni di risorse come parte del file di progettazione generic.xaml. Le definizioni di sistema ThemeDictionaries si trovano all'inizio del file, in modo che vengano inoltrate lessicalmente dall'estensione di markup {ThemeResource}che le fanno riferimento dai modelli di controllo predefiniti. Le definizioni di pagina e le definizioni di controllo personalizzate possono fare riferimenti all'estensione di markup {ThemeResource} alle risorse del tema fornite dal sistema. Si tratta infatti di una procedura consigliata se si scrivono controlli destinati a trovarsi nella stessa interfaccia utente dei controlli predefiniti. I controlli predefiniti usano in modo esteso le risorse del tema e l'uso delle risorse del tema nei controlli personalizzati può contribuire a evitare mancate corrispondenze visive se l'utente modifica il tema in fase di esecuzione o se l'app è in esecuzione in un tema per cui non è stato progettato in modo specifico.

Esistono anche risorse non pennello nelle risorse del tema di sistema in generic.xaml, ad esempio misure predefinite e proprietà del tipo di carattere.

I dizionari dei temi specificati per le singole app non sono destinati a fornire la definizione di risorsa di un intero tema dell'app. È invece consigliabile considerare l'interfaccia utente della pagina e le definizioni di controllo personalizzate per usare le risorse del tema di sistema quando possibile e usare le risorse del tema specifiche dell'app per pochi casi in cui si vuole eseguire l'override dei valori predefiniti del sistema. Per l'interfaccia utente dell'app a livello di pagina sono in genere necessarie solo nuove risorse del tema per determinate risorse non pennello usate nella composizione, ad esempio glifi o grafica basata sul percorso. Le risorse in ThemeDictionaries cui si definisce l'utente sono destinate a scenari come l'accessibilità. In particolare, potrebbero essere necessarie risorse diverse per i temi a contrasto elevato. Per altre info sullo scenario a contrasto elevato, vedi Temi a contrasto elevato. Per altre info sui temi forniti dal sistema, vedi l'esempio di tema richiestoRequestedTheme o XAML.

Le chiavi previste per i temi di base sono "Light" e "Dark".

Per i controlli personalizzati, è necessario avere anche un dizionario dei temi con chiave "HighContrast" ogni volta che si dispone di dizionari dei temi per "Light" e "Dark". Esistono altri temi denominati a contrasto elevato, ma la chiave del tema "HighContrast" è il fallback usato dal sistema per trovare il tema a contrasto elevato se non sono disponibili altre risorse del tema per il contrasto elevato.

Per i controlli personalizzati, se non sono supportati i temi "Light" e "Dark" e supportano solo un tema e almeno un tema "HighContrast", è possibile modificare l'attributo x:Key del dizionario principale in "Default". "Default" è l'oggetto ResourceDictionary che verrà usato se non è possibile trovare un Oggetto ResourceDictionary nel tema specificato, ad esempio "Scuro".

Per i temi a contrasto elevato e gli scenari di controllo personalizzati, oltre alle risorse del pennello di sistema, sono disponibili anche risorse colore di sistema come "SystemColorButtonFaceColor" che è possibile assegnare come valore Color delle risorse SolidColorBrush . È possibile usarli come valori per il dizionario dei temi "HighContrast" e anche "Default". Se la risorsa esiste per ognuno dei temi supportati dal controllo, i modelli XAML caricheranno la risorsa appropriata per il tema attivo.

Si applica a

Vedi anche