ResourceDictionary.ThemeDictionaries 속성

정의

테마 시나리오를 해결하기 위해 특별히 키 지정되고 구성된 병합된 리소스 사전의 컬렉션을 가져옵니다(예: "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>

속성 값

IMap<Object,Object>

IDictionary<Object,Object>

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

IMap<IInspectable,IInspectable>

ResourceDictionary 테마 사전의 사전입니다. 각각 은 x:Key로 키가 지정되어야 합니다.

예제

이 예제에서는 "기본" 테마의 브러시 스타일, 고대비에 대한 사용자 테마 선택 항목에 매핑되는 두 개의 기존 "HighContrast*" 테마 및 사용자 지정 고대비 테마를 정의하는 ThemeDictionaries 사전을 보여 줍니다. 사전은 사용자 지정 컨트롤에 대한 컨트롤 템플릿에서 사용됩니다. 이는 고대비 샘플의 일부입니다.

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

C++, C#또는 Visual Basic을 사용하는 UWP 앱의 시작 Microsoft Visual Studio 템플릿에는 app.xaml 파일의 시작 MergedDictionaries 값인 ThemeDictionaries 노드가 XAML 파일에 포함됩니다. 모든 기본 제공 Windows 런타임 컨트롤에는 이미 다른 곳에 정의된 고대비 테마(generic.xaml의 네이티브 테마)가 있거나 테마에 응답할 수 있도록 시스템 테마 리소스를 사용하므로 앱별 ThemeDictionaries 리소스 집합의 시작 콘텐츠는 최소화됩니다. 사용자 지정 컨트롤 또는 앱별 테마 스타일 정의를 시작한 후에만 여기에 더 많은 리소스 정의가 표시됩니다.

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

설명

테마 사전에는 두 가지 기본 시나리오, 즉 사용자 고유의 앱에 대한 리소스와 테마별로 시스템에서 제공하는 리소스가 있습니다. app.xaml에서 사용자 고유의 앱 리소스를 정의하는 경우에만 ThemeDictionaries 리소스 집합에 대한 값을 설정해야 합니다. 그렇지 않으면 XAML 컨트롤 템플릿 및 다른 곳에서 사용할 {ThemeResource} 태그 확장 사용은 일반적으로 generic.xaml 디자인 파일 내에서 디자인 목적으로 볼 수 있는 시스템 ThemeDictionaries 리소스를 참조합니다.

브러시 리소스는 종종 테마별로 다릅니다. 기본 Windows 런타임 XAML 컨트롤 UI는 다양한 기본 XAML 컨트롤에 사용되는 많은 브러시 리소스를 정의합니다. 이러한 리소스 정의는 generic.xaml 디자인 파일의 일부로 볼 수 있습니다. 시스템 ThemeDictionaries 정의는 파일의 초기에 위치하므로 기본 컨트롤 템플릿 내에서 참조하는 {ThemeResource} 태그 확장의 어휘로 전달됩니다. 사용자 고유의 페이지 정의 및 사용자 지정 컨트롤 정의는 시스템에서 제공하는 테마 리소스 에 대한 {ThemeResource} 태그 확장 참조를 만들 수 있습니다. 실제로 기본 컨트롤과 동일한 UI에 있는 컨트롤을 작성하는 경우 권장되는 방법입니다. 기본 컨트롤은 테마 리소스를 광범위하게 사용하고 있으며, 사용자 고유의 컨트롤에서 테마 리소스를 사용하면 사용자가 런타임에 테마를 변경하거나 앱이 특별히 디자인되지 않은 테마로 실행되는 경우 시각적 불일치를 방지할 수 있습니다.

generic.xaml의 시스템 테마 리소스에는 기본 측정값 및 글꼴 속성과 같은 브러시가 아닌 리소스도 있습니다.

개별 앱에 대해 지정하는 테마 사전은 전체 앱 테마의 리소스 정의를 제공하기 위한 것이 아닙니다. 대신 가능한 경우 시스템 테마 리소스를 사용하고 시스템 기본값을 재정의하려는 몇 가지 경우에 앱별 테마 리소스를 사용하도록 페이지 UI 및 사용자 지정 컨트롤 정의를 고려해야 합니다. 페이지 수준 앱 UI의 경우 일반적으로 문자 모양 또는 경로 기반 그래픽과 같은 컴퍼지션에 사용되는 특정 비 브러시 리소스에 대한 새 테마 리소스만 필요합니다. 자신을 정의하는 ThemeDictionaries의 리소스는 접근성과 같은 시나리오를 위한 것입니다. 특히 고대비 테마에는 다양한 리소스가 필요할 수 있습니다. 고대비 시나리오에 대한 자세한 내용은 고대비 테마를 참조하세요. 시스템 제공 테마에 대한 자세한 내용은 RequestedTheme 또는 XAML 요청된 테마 샘플을 참조하세요.

기본 테마에 필요한 키는 "밝게" 및 "어둡게"입니다.

사용자 지정 컨트롤의 경우 "밝게" 및 "어둡게"에 대한 테마 사전이 있을 때마다 "HighContrast" 키 테마 사전도 있어야 합니다. 다른 명명된 고대비 테마가 있지만 고대비를 위한 다른 테마 리소스를 사용할 수 없는 경우 시스템에서 고대비 테마를 찾는 데 사용하는 대체 항목은 "HighContrast" 테마 키입니다.

사용자 지정 컨트롤의 경우 "밝게" 및 "어두운" 테마를 지원하지 않고 하나의 테마와 하나 이상의 "HighContrast" 테마만 지원하는 경우 기본 사전의 x:Key 특성을 "기본값"으로 변경할 수 있습니다. "기본값"은 지정된 테마의 ResourceDictionary (예: "어둡게")를 찾을 수 없는 경우 사용할 ResourceDictionary 입니다.

고대비 테마 및 사용자 지정 컨트롤 시나리오의 경우 시스템 브러시 리소스 외에도 SolidColorBrush 리소스의 Color 값으로 할당할 수 있는 "SystemColorButtonFaceColor"와 같은 시스템 리소스도 있습니다. "HighContrast" 테마 사전 및 "기본값"의 값으로 사용할 수 있습니다. 컨트롤이 지원하는 각 테마에 대한 리소스가 있는 경우 XAML 템플릿은 활성 상태인 테마에 적절한 리소스를 로드합니다.

적용 대상

추가 정보