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:KeyXAML 리소스 사전 개념을 지원합니다.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. 예를 들어 x:Key WPF의 리소스에 대한 태그에 적용되는 것은 코드의 key WPF에 ResourceDictionary.Add ResourceDictionary 리소스를 추가할 때의 매개 변수 값과 같습니다.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와 IDictionary ResourceDictionary같은 구현인 부모 개체의 자식 개체는 일반적으로 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 형식은 사전 사용에 대한 암시적 키를 선언합니다.Some WPF types declare an implicit key for dictionary usage. 예를 들어 Style TargetTypea 또는 a와 DataTemplate DataType함께 있는 a는 에 ResourceDictionary 있을 수 있으며 암시적 키를 사용할 수 있습니다.For example, a Style with a TargetType, or a DataTemplate with a DataType, can be in a ResourceDictionary and use the implicit key.

  • WPF는 병합된 리소스 사전 개념을 지원합니다.WPF supports a merged resource dictionary concept. 병합된 사전 간에 키를 공유할 수 있으며 을 사용하여 FindResource공유 키 동작에 액세스할 수 있습니다.Keys can be shared between the merged dictionaries, and the shared key behavior can be accessed using FindResource. 자세한 내용은 병합된 리소스 사전을 참조하세요.For more information, see Merged Resource Dictionaries.

전체 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. A는 ResourceDictionary 일반적으로 태그의 요소로 명시적으로 제공되지 않지만 명확성을 원한다면 경우에 따라 제공될 수 Resources 있습니다(속성 요소와 사전을 채우는 항목 사이의 컬렉션 개체 요소일 수 있음).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. 예를 들어 a DataTemplate 또는 파생 클래스의 키는 별도로 처리되고 고유한 DataTemplateKey 개체를 생성합니다.For example, the key for a DataTemplate or any derived class is handled separately, and produces a distinct DataTemplateKey object.

키와 이름은 기본 XAMLx: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 Usage Notes

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

참조See also