x:Key 지시문x:Key Directive

XAML 정의 사전에서 만들어지고 참조 되는 요소를 고유 하 게 식별 합니다.Uniquely identifies elements that are created and referenced in a XAML-defined dictionary. XAML 개체 요소에 x:Key 값을 추가 하는 것은 WPF ResourceDictionary와 같이 리소스 사전에서 리소스를 식별 하는 가장 일반적인 방법입니다.Adding an x:Key value to a XAML object element is the most common way to identify a resource in a resource dictionary, for example in a WPF ResourceDictionary.

XAML 특성 사용XAML Attribute Usage

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

XAML 특성 사용 (WPF 관련)XAML Attribute Usage (WPF-specific)

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

XAML 값XAML Values

stringKeyValue 키로 사용할 텍스트 문자열입니다.A text string to use as a key. 텍스트 문자열은 XamlName 문법을준수 해야 합니다.The text string must conform to the XamlName Grammar.
markupExtensionUsage 태그 확장 구분 기호 내에서 키로 사용할 개체를 제공 하는 태그 확장 사용 {}입니다.Within the markup extension delimiters {}, a markup extension usage that provides an object to use as a key. 설명 부분을 참조하세요.See Remarks.

주의Remarks

x:Key는 XAML 리소스 사전 개념을 지원 합니다.x:Key supports the XAML resource dictionary concept. 언어별 XAML은 특정 UI 프레임 워크로 남은 리소스 사전 구현을 정의 하지 않습니다.XAML as a language doesn't define a resource dictionary implementation, that is left to specific UI frameworks. WPF에서 XAML 리소스 사전을 구현 하는 방법에 대해 자세히 알아보려면 Xaml 리소스를 참조 하세요.To learn more about how XAML resource dictionaries are implemented in WPF, see XAML Resources.

XAML 2006 및 WPF에서 x:Key은 특성으로 제공 되어야 합니다.In XAML 2006 and WPF, x:Key must be provided as an attribute. 여전히 문자열이 아닌 키를 사용할 수 있지만 특성 형식에서 문자열이 아닌 값을 제공 하기 위해 태그 확장 사용이 필요 합니다.You can still use nonstring keys, but this requires a markup extension usage in order to provide the nonstring value in attribute form. XAML 2009를 사용 하는 경우 태그 확장 중간을 요구 하지 않고 문자열 이외의 개체 형식으로 키가 지정 된 사전을 명시적으로 지원 하기 위해 x:Key를 요소로 지정할 수 있습니다.If you are using XAML 2009, x:Key can be specified as an element, to explicitly support dictionaries keyed by object types other than strings without requiring a markup extension intermediate. 이 항목의 "XAML 2009" 섹션을 참조 하세요.See the "XAML 2009" section in this topic. 설명 섹션의 나머지 부분은 XAML 2006 구현에만 적용 됩니다.The remainder of the Remarks section applies specifically to the XAML 2006 implementation.

x:Key의 특성 값은 XamlName 문법 에 정의 된 문자열이 될 수도 있고 태그 확장을 통해 계산 되는 개체 일 수도 있습니다.The attribute value of x:Key can be any string defined in the XamlName Grammar or can be an object evaluated through a markup extension. WPF의 예제는 "WPF 사용 정보"를 참조 하세요.See "WPF Usage Notes" for an example from WPF.

IDictionary 구현인 부모 요소의 자식 요소는 일반적으로 해당 사전 내에서 고유한 키 값을 지정 하는 x:Key 특성을 포함 해야 합니다.Child elements of a parent element that is an IDictionary implementation must typically include an x:Key attribute that specifies a unique key value within that dictionary. 프레임 워크는 특정 형식에 대 한 x:Key를 대체 하기 위해 별칭 지정 키 속성을 구현할 수 있습니다. 이러한 속성을 정의 하는 형식은 DictionaryKeyPropertyAttribute특성을 사용 해야 합니다.Frameworks might implement aliased key properties to substitute for x:Key on particular types; types that define such properties should be attributed with DictionaryKeyPropertyAttribute.

x:Key를 지정 하는 것과 동일한 코드는 기본 IDictionary에 사용 되는 키입니다.The code equivalent of specifying x:Key is the key that is used for the underlying IDictionary. 예를 들어 WPF에서 리소스에 대 한 태그에 적용 되는 x:Key는 코드에서 WPF ResourceDictionary에 리소스를 추가할 때 ResourceDictionary.Addkey 매개 변수 값과 동일 합니다.For example, an x:Key that is applied in markup for a resource in WPF is equivalent to the value of the key parameter of ResourceDictionary.Add when you add the resource to a WPF ResourceDictionary in code.

WPF 사용 정보WPF Usage Notes

WPF ResourceDictionary와 같이 IDictionary 구현인 부모 개체의 자식 개체는 일반적으로 x:Key 특성을 포함 해야 하며 키 값은 해당 사전 내에서 고유 해야 합니다.Child objects of a parent object that is an IDictionary implementation, such as the WPF ResourceDictionary, must typically include an x:Key attribute, and the key value must be unique within that dictionary. 다음과 같은 두 가지 주목할 만한 예외가 있습니다.There are two notable exceptions:

전반적인 WPF XAML 구현 및 응용 프로그램 모델에서 키 고유성이 XAML 태그 컴파일러에 의해 검사 되지 않습니다.In the overall WPF XAML implementation and application model, key uniqueness is not checked by the XAML markup compiler. 대신, x:Key 값이 없거나 고유 하지 않으면 로드 시간 XAML 파서 오류가 발생 합니다.Instead, missing or nonunique x:Key values cause load-time XAML parser errors. 그러나 WPF 용 사전의 Visual Studio 처리는 디자인 단계에서 이러한 오류를 종종 확인할 수 있습니다.However, Visual Studio handling of dictionaries for WPF can often note such errors in the design phase.

표시 된 구문에서 ResourceDictionary 개체는 WPF XAML 프로세서가 컬렉션을 생성 하 여 Resources 컬렉션을 채우는 방법에서 암시적입니다.Note that in the syntax shown, the ResourceDictionary object is implicit in how the WPF XAML processor produces a collection to populate a Resources collection. ResourceDictionary은 일반적으로 태그에서 요소로 명시적으로 제공 되지 않습니다 .이는 명확 하 게 하기 위해 필요한 경우 (예를 들어, Resources property 요소와 사전을 채우는 내의 항목 사이에 컬렉션 개체 요소가 될 수 있음)A ResourceDictionary is not typically provided explicitly as an element in markup, although it can be in some cases if wanted for clarity (it would be a collection object element between the Resources property element and the items within that populate the dictionary). 컬렉션 개체가 거의 항상 태그의 암시적 요소인 이유에 대 한 자세한 내용은 XAML 구문정보를 참조 하세요.For information about why a collection object is almost always an implicit element in markup, see XAML Syntax In Detail.

WPF XAML 구현에서 리소스 사전 키에 대 한 처리는 ResourceKey 추상 클래스에 의해 정의 됩니다.In the WPF XAML implementation, the handling for resource dictionary keys is defined by the ResourceKey abstract class. 그러나 WPF XAML 프로세서는 용도에 따라 키에 대해 서로 다른 기본 확장 형식을 생성 합니다.However the WPF XAML processor produces different underlying extension types for keys based on their usages. 예를 들어 DataTemplate 또는 파생 클래스의 키는 별도로 처리 되 고 고유한 DataTemplateKey 개체를 생성 합니다.For example, the key for a DataTemplate or any derived class is handled separately, and produces a distinct DataTemplateKey object.

키와 이름은 기본 XAML 정의에서 다른 지시문 및 언어 요소 (x:Key x:Name)를 사용 합니다.Keys and names use different directives and language elements (x:Key versus x:Name) in the basic XAML definition. 키와 이름은 WPF 정의 및 이러한 개념의 응용 프로그램에서 다양 한 상황에도 사용 됩니다.Keys and names are also used in different situations by the WPF definition and application of these concepts. 자세한 내용은 WPF XAML 이름 범위를 참조 하세요.For details, see WPF XAML Namescopes.

앞에서 설명한 것 처럼 키 값은 태그 확장을 통해 제공 될 수 있으며 문자열 값이 아닌 다른 값이 될 수 있습니다.As stated previously, the value of a key can be supplied through a markup extension and can be other than a string value. 예제 WPF 시나리오는 x:Key 값이 ComponentResourceKey수 있다는 것입니다.An example WPF scenario is that the value of x:Key may be a ComponentResourceKey. 특정 컨트롤은 스타일을 완전히 바꾸지 않고 해당 컨트롤의 모양과 동작의 일부에 영향을 주는 사용자 지정 스타일 리소스에 대해 해당 형식의 스타일 키를 노출 합니다.Certain controls expose a style key of that type for a custom style resource that influences part of the appearance and behavior of that control without totally replacing the style. 이러한 키의 예는 ButtonStyleKey합니다.An example of such a key is ButtonStyleKey.

WPF 병합 사전 기능에서는 키 고유성 및 키 조회 동작에 대 한 추가 고려 사항을 소개 합니다.The WPF merged dictionary feature introduces additional considerations for key uniqueness and key lookup behavior. 자세한 내용은 병합된 리소스 사전을 참조하세요.For more information, see Merged Resource Dictionaries.

XAML 2009XAML 2009

XAML 2009은 x:Key 항상 특성 형식으로 제공 되는 제한을 완화 합니다.XAML 2009 relaxes the restriction that x:Key always be provided in attribute form.

WPF에서 XAML 2009 기능을 사용할 수 있지만 태그 컴파일되지 않은 XAML에만 사용할 수 있습니다.In WPF, you can use XAML 2009 features, but only for XAML that is not markup-compiled. WPF에 대한 태그로 컴파일된 XAML 및 BAML 형식의 XAML은 현재 XAML 2009 키워드 및 기능을 지원하지 않습니다.Markup-compiled XAML for WPF and the BAML form of XAML do not currently support the XAML 2009 keywords and features.

XAML 2009에서는 다음을 사용 하 여 x:Key 요소를 지정할 수 있습니다.Under XAML 2009, you can specify x:Key elements through the following usage:

XAML 요소 사용 (XAML 2009에만 해당)XAML Element Usage (XAML 2009 only)

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

XAML 값XAML Values

keyObject 특수 한 사전에서 지정 된 object에 대 한 키로 사용 되는 개체의 개체 요소입니다.Object element for the object that is used as the key for a given object in a specialized dictionary.
  • 이러한 종류의 용도에 대 한 컨테이너/부모는 여기에 표시 되지 않습니다.The container/parent for this kind of use is not shown here. object은 특수 사전 구현을 나타내는 개체 요소의 자식일 것으로 예상 됩니다.object is expected to be a child of an object element that represents a specialized dictionary implementation. keyObject은 해당 하는 특정 사전 구현에 대 한 키로 적합 한 개체 인스턴스 (또는 값 형식의 값)가 될 것으로 예상 됩니다.keyObject is expected to be an object instance (or a value of a value type) that is appropriate as the key for that particular specialized dictionary implementation.

  • WPF는 이러한 사용법이 필요한 사전을 구현 하지 않습니다.WPF does not implement dictionaries that require this usage. 개체 키는 XAML 언어의 일반적인 기능입니다. XAML로 사전을 만드는 것이 바람직한 특정 사용자 지정 사전 시나리오에 유용할 수 있습니다.Object keys is more a general feature of the XAML language, possibly useful for certain custom dictionary scenarios where creating the dictionary in XAML is desirable. 리소스에 대해 문자열이 아닌 키를 사용 하는 암시적 스타일과 같은 WPF 기능의 경우 키를 설정 하거나 지정 하는 다른 기술 들이 존재 하므로 개체 키를 사용 하지 않아도 됩니다.For WPF features such as implicit styles that use non-string keys for resources, other techniques for establishing or specifying the keys exist, so using an object key is not necessary.

  • keyObject 는 직접 개체 인스턴스가 아닌 개체 요소 형식에서 태그 확장 사용이 될 수도 있습니다.keyObject could also be a markup extension usage in object element form, rather than a direct object instance.

Silverlight 사용 메모Silverlight Usage Notes

Silverlight에 대 한 x:Key 별도로 설명 되어 있습니다.x:Key for Silverlight is documented separately. 자세한 내용은 XAML 네임 스페이스 (x:)를 참조 하세요. 언어 기능 (Silverlight).For more information, see XAML Namespace (x:) Language Features (Silverlight).

참조See also