다음을 통해 공유


XAML의 제네릭

System.Xaml에 구현된 .NET XAML 서비스는 제네릭 CLR 유형 사용을 지원합니다. 이 지원에는 제네릭의 제약 조건을 형식 인수로 지정하고 제네릭 컬렉션 사례에 적합한 Add 메서드를 호출하여 제약 조건을 적용하는 것이 포함됩니다. 이 항목에서는 XAML에서 제네릭 형식을 사용하고 참조하는 측면에 대해 설명합니다.

x:TypeArguments

x:TypeArguments는 XAML 언어로 정의된 지시문입니다. 제네릭 형식이 지원하는 XAML 형식의 멤버로 사용되는 경우 x:TypeArguments는 제네릭의 제약 형식 인수를 지원 생성자에 전달합니다. 구문 예제를 포함된 x:TypeArguments의 .NET XAML 서비스 사용과 관련된 참조 구문은 x:TypeArguments 지시문을 참조하세요.

x:TypeArguments는 문자열을 사용하고 형식 변환기를 지원하므로 일반적으로 XAML 사용에서 특성으로 선언됩니다.

XAML 노드 스트림에서 x:TypeArguments에 의해 선언된 정보는 노드 스트림의 StartObject 위치에 있는 XamlType.TypeArguments에서 가져올 수 있습니다. XamlType.TypeArguments의 반환 값은 XamlType 값의 목록입니다. XAML 형식이 제네릭 형식을 나타내는지 여부를 결정하는 작업은 XamlType.IsGeneric을 호출하여 수행할 수 있습니다.

XAML의 제네릭에 대한 규칙 및 구문 규칙

XAML에서 제네릭 형식은 항상 제한된 제네릭으로 표현되어야 합니다. 제한되지 않은 제네릭은 XAML 형식 시스템 또는 XAML 노드 스트림에 존재하지 않으며 XAML 태그에 나타낼 수 없습니다. 제네릭은 x:TypeArguments에서 참조하는 제네릭의 중첩된 형식 제약 조건인 경우 또는 x:Type이 제네릭 형식에 대한 CLR 형식 참조를 제공하는 경우 XAML 특성 구문 내에서 참조될 수 있습니다. 제네릭 참조는 .NET XAML 서비스에서 정의한 XamlTypeTypeConverter 클래스를 통해 지원됩니다.

XamlTypeTypeConverter에서 사용하도록 설정된 XAML 특성 구문 양식은 제네릭의 형식 및 제약 조건에 꺾쇠 괄호를 사용하고 제약 조건 컨테이너 대신 괄호를 사용하는 일반적인 MSIL/CLR 구문 규칙을 변경합니다. 예제는 x:TypeArguments 지시문을 참조하세요.

제네릭 및 XAML 2009 기능

CLR 기본 형식을 매핑하여 공용 언어 기본 형식에 대한 XAML 형식을 가져오는 대신 XAML 2009를 사용하는 경우 XAML 2009 기본 제공 형식x:TypeArguments의 정보 항목으로 사용할 수 있습니다. 예를 들어 다음을 선언할 수 있습니다(접두사 매핑은 표시되지 않지만 x는 XAML 2009용 XAML 언어 XAML 네임스페이스임).

<my:BusinessObject x:TypeArguments="x:String,x:Int32"/>

WPF의 제네릭 지원

특히 WPF를 대상으로 하는 XAML 2006 사용의 경우 x:Classx:TypeArguments와 동일한 요소에 제공되어야 하며 해당 요소는 XAML 문서의 루트 요소여야 합니다. 루트 요소는 하나 이상의 형식 인수를 사용하여 제네릭 형식에 매핑되어야 합니다. 예제는 PageFunction<T>입니다.

제네릭 사용을 지원하기 위한 가능한 해결 방법에는 제네릭 형식을 반환할 수 있는 사용자 지정 태그 확장을 정의하거나 제네릭 형식에서 파생되지만 자체 클래스 정의에서 제네릭 제약 조건을 평면화하는 래핑 클래스 정의를 제공하는 것이 포함됩니다.

WPF에서는 XAML 2009 기능을 x:TypeArguments와 함께 사용할 수 있지만 느슨한 XAML(태그로 컴파일되지 않은 XAML)에만 사용할 수 있습니다. WPF에 대한 태그로 컴파일된 XAML 및 BAML 형식의 XAML은 현재 XAML 2009 키워드 및 기능을 지원하지 않습니다.

.NET Framework 3.5용 Windows Workflow Foundation의 사용자 지정 워크플로는 일반 XAML 사용을 지원하지 않습니다.

참고 항목