Compartilhar via


ResourceDictionary.ThemeDictionaries Propriedade

Definição

Obtém uma coleção de dicionários de recursos mesclados que são especificamente chaveados e compostos para abordar cenários de tema, por exemplo, fornecendo 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 da propriedade

IMap<Object,Object>

IDictionary<Object,Object>

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

IMap<IInspectable,IInspectable>

Um dicionário de dicionários de temas ResourceDictionary . Cada um deve ser chaveado com x:Key.

Exemplos

Este exemplo mostra um dicionário ThemeDictionaries que define estilos de pincel para um tema "Padrão", dois temas "HighContrast*" existentes que são mapeados para opções de tema do usuário para alto contraste e um tema personalizado de alto contraste. O dicionário é usado por um modelo de controle para um controle personalizado. Isso faz parte do exemplo de Alto contraste.

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

Os modelos iniciais do Microsoft Visual Studio para um aplicativo UWP usando C++, C# ou Visual Basic incluem um nó ThemeDictionaries no arquivo XAML que é o valor inicial de MergedDictionaries para um arquivo app.xaml. Todos os controles de Windows Runtime internos já têm temas de alto contraste definidos em outro lugar (o equivalente nativo de generic.xaml) ou usam recursos de tema do sistema para que possam responder a temas, portanto, o conteúdo inicial de um conjunto de recursos ThemeDictionaries específico do aplicativo é mínimo. É apenas uma vez que você começa a definir controles personalizados ou estilos de tema específicos do aplicativo que você verá mais definições de recursos aqui.

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

Comentários

Os dicionários de temas têm dois cenários principais: recursos para seu próprio aplicativo e recursos que o sistema fornece para você por tema. Você só precisará definir valores para o conjunto de recursos ThemeDictionaries se estiver definindo seus próprios recursos de aplicativo em app.xaml. Caso contrário, os usos da extensão de marcação {ThemeResource} que você usará em modelos de controle XAML e em outros lugares normalmente estão se referindo aos recursos themeDictionaries do sistema, que podem ser exibidos para fins de design dentro do arquivo de design generic.xaml.

Os recursos de pincel geralmente são específicos do tema. O padrão Windows Runtime interface do usuário de controle XAML define muitos recursos de pincel usados para os vários controles XAML padrão. Você pode ver essas definições de recurso como parte do arquivo de design generic.xaml. As definições themeDictionaries do sistema estão localizadas no início do arquivo, para que sejam lexicalmente encaminhadas da extensão de marcação {ThemeResource}que as referenciam de dentro dos modelos de controle padrão. Suas próprias definições de página e definições de controle personalizado podem fazer referências de extensão de marcação {ThemeResource} aos recursos de tema fornecidos pelo sistema. Na verdade, essa é uma prática recomendada se você estiver escrevendo controles destinados a estar na mesma interface do usuário que os controles padrão. Os controles padrão estão usando amplamente os recursos de tema e usar os recursos de tema em seus próprios controles pode ajudar a evitar incompatibilidades visuais se o usuário alterar o tema em runtime ou se o aplicativo estiver em execução sob um tema para o qual você não havia projetado especificamente.

Também há recursos que não são de pincel nos recursos de tema do sistema em generic.xaml, como medidas padrão e propriedades de fonte.

Os dicionários de temas que você especificar para aplicativos individuais não se destinam a fornecer a definição de recurso de um tema de aplicativo inteiro. Em vez disso, você deve fatorar a interface do usuário da página e as definições de controle personalizado para usar recursos de tema do sistema sempre que possível e usar recursos de tema específicos do aplicativo para apenas alguns casos em que você deseja substituir os valores padrão do sistema. Para a interface do usuário do aplicativo no nível da página, normalmente, você só precisa de novos recursos de tema para determinados recursos que não são de pincel usados na composição, como glifos ou gráficos baseados em caminho. Os recursos em ThemeDictionaries que você define são destinados a cenários como acessibilidade. Em particular, recursos diferentes podem ser necessários para temas de alto contraste. Para obter mais informações sobre o cenário de alto contraste, consulte Temas de alto contraste. Para obter mais informações sobre temas fornecidos pelo sistema, consulte Exemplo de tema solicitado requestedTheme ou XAML.

As chaves esperadas para os temas básicos são "Claro" e "Escuro".

Para controles personalizados, você também deve ter um dicionário de temas com chave "HighContrast" sempre que tiver dicionários de temas para "Claro" e "Escuro". Há outros temas nomeados de alto contraste, mas a chave de tema "HighContrast" é o fallback que o sistema usa para encontrar o tema de alto contraste se nenhum outro recurso de tema para alto contraste estiver disponível.

Para controles personalizados, se você não der suporte a temas "Claro" e "Escuro" e oferecer suporte apenas a um tema, bem como pelo menos um tema "HighContrast", poderá alterar o atributo x:Key do dicionário main para "Padrão". "Padrão" é o ResourceDictionary que será usado se um ResourceDictionary no tema especificado (como "Escuro") não puder ser encontrado.

Para temas de alto contraste e cenários de controle personalizados, além dos recursos de pincel do sistema, também há recursos de cor do sistema, como "SystemColorButtonFaceColor" que você pode atribuir para ser o valor color dos recursos SolidColorBrush . Você pode usá-los como valores para seu dicionário de temas "HighContrast" e também "Padrão". Se o recurso existir para cada um dos temas compatíveis com o controle, os modelos XAML carregarão o recurso apropriado para o tema que está ativo.

Aplica-se a

Confira também