x:Key 지시문

XAML 정의 사전에서 만들고 참조하는 요소를 고유하게 식별합니다. XAML 개체 요소에 x:Key 값을 추가하는 것은 리소스 사전(예: WPF ResourceDictionary)에서 리소스를 식별하는 가장 일반적인 방법입니다.

XAML 특성 사용

<object x:Key="stringKeyValue".../>  
-or-  
<object x:Key="{markupExtensionUsage}".../>  

XAML 특성 사용(WPF 전용)

<object.Resources>  
  <object x:Key="stringKeyValue".../>  
</object.Resources>  
-or-  
<object.Resources>  
  <object x:Key="{markupExtensionUsage}".../>  
</object.Resources>  

XAML 값

설명
stringKeyValue 키로 사용할 텍스트 문자열입니다. 텍스트 문자열은 XamlName Grammar를 준수해야 합니다.
markupExtensionUsage 태그 확장 구분 기호 {} 내에서 키로 사용할 개체를 제공하는 태그 확장 사용법입니다. 설명 부분을 참조하세요.

설명

x:Key는 XAML 리소스 사전 개념을 지원합니다. 언어로서 XAML은 리소스 사전 구현을 정의하지 않습니다. 리소스 사전 구현은 특정 UI 프레임워크의 몫입니다. WPF에서 XAML 리소스 사전이 구현되는 방법에 대한 자세한 내용은 XAML 리소스 개요(WPF .NET)를 참조하세요.

XAML 2006과 WPF에서 x:Key는 특성으로 제공되어야 합니다. 문자열이 아닌 키를 계속 사용할 수 있지만 특성 양식으로 문자열이 아닌 값을 제공하려면 태그 확장 사용이 필요합니다. XAML 2009를 사용하는 경우 x:Key를 요소로 지정하면 태그 확장 중간을 요구하지 않고 문자열 이외의 개체 형식으로 키가 지정된 사전을 명시적으로 지원할 수 있습니다. 이 항목의 "XAML 2009" 섹션을 참조하세요. 설명 섹션의 나머지 부분은 특히 XAML 2006 구현에 적용됩니다.

특성 값 x:KeyXamlName Grammar에 정의된 문자열이거나 태그 확장을 통해 평가되는 개체일 수 있습니다. WPF의 예제는 "WPF 사용 정보"를 참조하세요.

IDictionary 구현인 부모 요소의 자식 요소는 일반적으로 해당 사전 내에서 고유한 키 값을 지정하는 x:Key 특성이 포함되어야 합니다. 프레임워크는 별칭이 지정된 키 속성을 구현하여 특정 형식에서 x:Key를 대체할 수 있습니다. 이러한 속성을 정의하는 형식은 DictionaryKeyPropertyAttribute로 특성 사용되어야 합니다.

x:Key 지정에 해당하는 코드는 기본 IDictionary에 사용되는 키입니다. 예를 들어 WPF에서 리소스의 태그에 적용되는 x:Key는 코드에서 WPF ResourceDictionary에 리소스를 추가할 때 ResourceDictionary.Addkey 매개 변수에 해당합니다.

WPF 사용 정보

WPF ResourceDictionary와 같은 IDictionary 구현인 부모 개체의 자식 개체는 일반적으로 x:Key 특성을 포함해야 하며 키 값은 해당 사전 내에서 고유해야 합니다. 주목할 만한 두 가지 예외가 있습니다.

  • 일부 WPF 형식은 사전 사용에 대한 암시적 키를 선언합니다. 예를 들어 TargetType가 있는 Style 또는 DataType이 있는 DataTemplateResourceDictionary에 있을 수 있으며 암시적 키를 사용할 수 있습니다.

  • WPF는 병합된 리소스 사전 개념을 지원합니다. 병합된 사전 간에 키를 공유할 수 있으며, FindResource를 사용하여 공유 키 동작에 액세스할 수 있습니다. 자세한 내용은 병합된 리소스 사전을 참조하세요.

전체 WPF XAML 구현 및 애플리케이션 모델에서는 XAML 태그 컴파일러가 키 고유성을 확인하지 않습니다. 대신 누락되거나 고유하지 않은 x:Key 값으로 인해 로드 시간 XAML 파서 오류가 발생합니다. 그러나 WPF용 사전의 Visual Studio 처리는 종종 디자인 단계에서 이러한 오류를 기록할 수 있습니다.

표시된 구문에서 ResourceDictionary 개체는 WPF XAML 프로세서가 Resources 컬렉션을 채울 컬렉션을 생성하는 방법이 암시적입니다. ResourceDictionary는 일반적으로 태그의 요소로 명시적으로 제공되지 않지만 명확성을 원하는 경우 태그의 요소가 될 수 있습니다(Resources 속성 요소와 사전을 채우는 항목 사이의 컬렉션 개체 요소가 됩니다). 컬렉션 개체가 태그에서 거의 항상 암시적 요소인 이유에 대한 자세한 내용은 XAML 구문 세부 정보를 참조하세요.

WPF XAML 구현에서 리소스 사전 키 처리는 ResourceKey 추상 클래스에 의해 정의됩니다. 그러나 WPF XAML 프로세서는 키 사용에 따라 서로 다른 키 기본 확장 형식을 생성합니다. 예를 들어 DataTemplate 또는 파생 클래스의 키는 개별적으로 처리되고 고유한 DataTemplateKey 개체를 생성합니다.

키와 이름은 기본 XAML 정의에서 서로 다른 지시문 및 언어 요소(x:Keyx:Name)를 사용합니다. 키와 이름은 WPF 정의 및 이러한 개념의 애플리케이션에 의해 다양한 상황에서도 사용됩니다. 자세한 내용은 WPF XAML 이름 범위를 참조하세요.

앞서 설명한 것처럼 태그 확장을 통해 키 값을 제공할 수 있으며 키 값은 문자열 값이 아닐 수 있습니다. WPF 시나리오의 예는 x:Key 값이 ComponentResourceKey일 수 있다는 것입니다. 특정 컨트롤은 스타일을 완전히 대체하지 않고 해당 컨트롤의 모양과 동작 일부에 영향을 주는 사용자 지정 스타일 리소스에 대해 해당 형식의 스타일 키를 노출합니다. 이러한 키의 예는 ButtonStyleKey입니다.

WPF 병합된 사전 기능은 키 고유성 및 키 조회 동작에 대한 추가 고려 사항을 도입합니다. 자세한 내용은 병합된 리소스 사전을 참조하세요.

XAML 2009

XAML 2009는 x:Key가 항상 특성 양식으로 제공되어야 하는 제한을 완화합니다.

WPF에서 XAML 2009 기능을 사용할 수 있지만 태그로 컴파일되지 않은 XAML에만 사용할 수 있습니다. WPF에 대한 태그로 컴파일된 XAML 및 BAML 형식의 XAML은 현재 XAML 2009 키워드 및 기능을 지원하지 않습니다.

XAML 2009에서 다음 사용을 통해 x:Key 요소를 지정할 수 있습니다.

XAML 요소 사용(XAML 2009만 해당)

<object>  
  <x:Key>  
keyObject  
  </x:Key>  
...  
</object>  

XAML 값

설명
keyObject 특수한 사전에서 지정된 object의 키로 사용되는 개체의 개체 요소.
  • 이러한 종류의 사용을 위한 컨테이너/부모는 여기에 나와 있지 않습니다. object는 특수한 사전 구현을 나타내는 개체 요소의 자식이어야 합니다. keyObject는 특정 특수 사전 구현의 키로 적합한 개체 인스턴스(또는 값 형식의 값)여야 합니다.

  • WPF는 이 사용이 필요한 사전을 구현하지 않습니다. 개체 키는 XAML 언어의 보다 일반적인 기능이며, XAML에서 사전을 만드는 것이 바람직한 특정 사용자 지정 사전 시나리오에 유용할 수 있습니다. 리소스에 문자열이 아닌 키를 사용하는 암시적 스타일과 같은 WPF 기능의 경우 키를 설정하거나 지정하는 다른 기법이 존재하므로 개체 키를 사용할 필요가 없습니다.

  • keyObject는 직접 개체 인스턴스가 아닌 개체 요소 양식의 태그 확장 사용일 수도 있습니다.

Silverlight 사용 정보

Silverlight의 x:Key은 별도로 문서화됩니다. 자세한 내용은 XAML 네임스페이스(x:) 언어 기능(Silverlight)을 참조하세요.

참고 항목