다음을 통해 공유


사용자 지정 형식 및 라이브러리에 대한 XAML 관련 CLR 특성

이 항목에서는 .NET XAML 서비스에서 정의한 CLR(공용 언어 런타임) 특성에 대해 설명합니다. 또한 어셈블리 또는 형식에 대한 XAML 관련 시나리오가 있는 .NET에 정의된 다른 CLR 특성에 대해서도 설명합니다. 이러한 CLR 특성을 사용하여 어셈블리, 형식 또는 멤버의 특성을 지정하면 형식과 관련된 XAML 형식 시스템 정보가 제공됩니다. 정보는 .NET XAML 서비스를 사용하여 XAML 노드 스트림을 직접 처리하거나 전용 XAML 판독기 및 XAML 기록기를 통해 제공하는 모든 XAML 소비자에게 제공됩니다.

CLR 특성을 사용하려면 전체 CLR을 사용하여 형식을 정의해야 합니다. 그렇지 않으면 이러한 특성을 사용할 수 없습니다. CLR을 사용하여 형식 지원을 정의하는 경우 .NET XAML 서비스 XAML 작성기에서 사용하는 기본 XAML 스키마 컨텍스트는 지원 어셈블리에 대한 리플렉션을 통해 CLR 특성을 읽을 수 있습니다.

다음 섹션에서는 사용자 지정 형식 또는 사용자 지정 멤버에 적용할 수 있는 XAML 관련 특성에 대해 설명합니다. 각 CLR 특성은 XAML 형식 시스템과 관련된 정보를 전달합니다. 로드 경로에서 특성이 지정된 정보는 XAML 판독기가 유효한 XAML 노드 스트림을 형성하는 데 도움이 되거나 XAML 작성기가 유효한 개체 그래프를 생성하는 데 도움이 됩니다. 저장 경로에서 특성이 지정된 정보는 XAML 판독기가 XAML 형식 시스템 정보를 재구성하는 유효한 XAML 노드 스트림을 형성하는 데 도움이 됩니다. 또는 XAML 기록기 또는 다른 XAML 소비자에 대한 serialization 힌트 또는 요구 사항을 선언합니다.

AmbientAttribute

참조 설명서: AmbientAttribute

적용 대상: 연결 가능한 속성을 지원하는 클래스, 속성 또는 get 접근자 멤버.

인수: 없음

AmbientAttribute는 속성 또는 특성이 지정된 형식을 사용하는 모든 속성이 XAML의 앰비언트 속성 개념에 따라 해석되어야 함을 나타냅니다. 앰비언트 개념은 XAML 프로세서가 멤버의 형식 소유자를 결정하는 방법과 관련됩니다. 앰비언트 속성은 개체 그래프를 만들 때 파서 컨텍스트에서 값을 사용할 수 있어야 하지만 만들어지는 즉시 XAML 노드 집합에 대해 일반적인 형식 멤버 조회가 일시 중단되는 속성입니다.

앰비언트 개념은 CLR 특성이 AttributeTargets를 정의하는 방식과 관련하여 속성으로 표시되지 않는 연결 가능한 멤버에 적용할 수 있습니다. 메서드 특성 사용은 XAML에 대해 연결 가능한 사용을 지원하는 get 접근자에만 적용되어야 합니다.

ConstructorArgumentAttribute

참조 설명서: ConstructorArgumentAttribute

적용 대상: 클래스

인수: 단일 생성자 인수와 일치하는 속성의 이름을 지정하는 문자열.

ConstructorArgumentAttribute는 개체가 매개변수가 있는 생성자 구문을 사용하여 초기화될 수 있고 지정된 이름의 속성이 생성 정보를 제공한다는 것을 지정합니다. 이 정보는 주로 XAML serialization용입니다. 자세한 내용은 ConstructorArgumentAttribute를 참조하세요.

ContentPropertyAttribute

참조 설명서: ContentPropertyAttribute

적용 대상: 클래스

인수: 특성이 지정된 형식의 멤버 이름을 지정하는 문자열.

ContentPropertyAttribute는 인수에서 명명된 속성이 해당 형식의 XAML 콘텐츠 속성으로 사용되어야 함을 나타냅니다. XAML 콘텐츠 속성 정의는 정의 형식에 할당할 수 있는 모든 파생 형식에 상속됩니다. 특정 파생 형식에서 ContentPropertyAttribute를 적용하여 특정 파생 형식에 대한 정의를 재정의할 수 있습니다.

XAML 콘텐츠 속성 역할을 하는 속성의 경우 XAML 사용에서 속성에 대한 속성 요소 태그 지정을 생략할 수 있습니다. 일반적으로 콘텐츠 및 포함 모델에 대해 간소화된 XAML 태그를 승격하는 XAML 콘텐츠 속성을 지정합니다. 하나의 멤버만 XAML 콘텐츠 속성으로 지정할 수 있으므로 형식의 여러 컨테이너 속성 중 무엇을 XAML 콘텐츠 속성으로 지정할지에 대한 디자인 선택을 해야 하는 경우가 있습니다. 다른 컨테이너 속성은 명시적 속성 요소와 함께 사용해야 합니다.

XAML 노드 스트림에서 XAML 콘텐츠 속성은 여전히 XamlMember에 대한 속성의 이름을 사용하여 StartMemberEndMember 노드를 생성합니다. 멤버가 XAML 콘텐츠 속성인지 확인하려면 StartObject 위치에서 XamlType 값을 검사하고 ContentProperty의 값을 가져옵니다.

ContentWrapperAttribute

참조 설명서: ContentWrapperAttribute

적용 대상: 클래스, 특히 컬렉션 형식.

인수: 외부 콘텐츠에 대한 콘텐츠 래퍼 형식으로 사용할 형식을 지정하는 Type.

ContentWrapperAttribute는 외부 콘텐츠를 래핑하는 데 사용할 연결된 컬렉션 형식에 하나 이상의 형식을 지정합니다. 외부 콘텐츠는 콘텐츠 속성의 형식에 대한 형식 시스템 제약 조건이 소유 형식에 대한 XAML 사용이 지원하는 모든 가능한 콘텐츠 사례를 캡처하지 않는 경우를 나타냅니다. 예를 들어 특정 형식의 콘텐츠에 대한 XAML 지원은 강력한 형식의 제네릭 Collection<T>의 문자열을 지원할 수 있습니다. 콘텐츠 래퍼는 텍스트 관련 콘텐츠 모델 마이그레이션과 같이 기존 태그 규칙을 XAML의 컬렉션에 대한 할당 가능한 값 개념으로 마이그레이션하는 데 유용합니다.

둘 이상의 콘텐츠 래퍼 형식을 지정하려면 특성을 여러 번 적용합니다.

DependsOnAttribute

참조 설명서: DependsOnAttribute

적용 대상: 속성

인수: 특성이 지정된 형식의 다른 멤버의 이름을 지정하는 문자열.

DependsOnAttribute는 특성이 지정된 속성이 다른 속성의 값에 종속된다는 것을 나타냅니다. 이 특성을 속성 정의에 적용하면 종속 속성이 XAML 개체 쓰기에서 먼저 처리됩니다. DependsOnAttribute 사용은 유효한 개체 생성을 위해 특정 구문 분석 순서를 따라야 하는 유형의 속성에 대한 예외 경우를 지정합니다.

속성 정의에 여러 DependsOnAttribute 사례를 적용할 수 있습니다.

MarkupExtensionReturnTypeAttribute

참조 설명서: MarkupExtensionReturnTypeAttribute

적용 대상:MarkupExtension 파생 형식으로 예상되는 클래스.

인수: 특성이 지정된 MarkupExtensionProvideValue 결과로 예상할 가장 정확한 형식을 지정하는 Type.

자세한 내용은 XAML용 태그 확장 개요를 참조하세요.

NameScopePropertyAttribute

참조 설명서: NameScopePropertyAttribute

적용 대상: 클래스

인수: 두 가지 형식의 특성을 지원합니다.

  • 특성이 지정된 형식에서 속성의 이름을 지정하는 문자열.

  • 속성의 이름을 지정하는 문자열 및 명명된 속성을 정의하는 형식에 대한 Type. 이 형식은 연결 가능한 멤버를 XAML 이름 범위 속성으로 지정하기 위한 것입니다.

NameScopePropertyAttribute는 특성이 지정된 클래스에 대한 XAML 이름 범위 값을 제공하는 속성을 지정합니다. XAML 이름 범위 속성은 INameScope를 구현하고 실제 XAML 이름 범위, 해당 저장소 및 해당 동작을 저장하는 개체를 참조해야 합니다.

RuntimeNamePropertyAttribute

참조 설명서: RuntimeNamePropertyAttribute

적용 대상: 클래스

인수: 특성이 지정된 형식의 런타임 이름 속성의 이름을 지정하는 문자열.

RuntimeNamePropertyAttribute는 XAML x:Name 지시문에 매핑되는 특성이 지정된 형식의 속성을 보고합니다. 속성은 String 형식이어야 하며 읽기/쓰기여야 합니다.

정의는 정의 형식에 할당할 수 있는 모든 파생 형식에 상속됩니다. 특정 파생 형식에서 RuntimeNamePropertyAttribute를 적용하여 특정 파생 형식에 대한 정의를 재정의할 수 있습니다.

TrimSurroundingWhitespaceAttribute

참조 설명서: TrimSurroundingWhitespaceAttribute

적용 대상: 형식

인수: 없음.

TrimSurroundingWhitespaceAttribute는 공백 유효 콘텐츠(WhitespaceSignificantCollectionAttribute이 포함된 컬렉션에서 보유하는 콘텐츠) 내에서 자식 요소로 나타날 수 있는 특정 형식에 적용됩니다. TrimSurroundingWhitespaceAttribute는 주로 저장 경로와 관련이 있지만 XamlType.TrimSurroundingWhitespace를 검사하여 로드 경로의 XAML 형식 시스템에서 사용할 수 있습니다. 자세한 내용은 XAML의 공백 처리를 참조하세요.

TypeConverterAttribute

참조 설명서: TypeConverterAttribute

적용 대상: 클래스, 속성, 메서드(유일한 XAML 유효 메서드 사례는 연결 가능한 멤버를 지원하는 get 접근자).

인수:TypeConverterType.

XAML 컨텍스트에서 TypeConverterAttribute는 사용자 지정 TypeConverter를 참조합니다. 이 TypeConverter는 사용자 지정 형식 또는 해당 형식의 멤버에 대한 형식 변환 동작을 제공합니다.

형식 변환기 구현을 참조하여 TypeConverterAttribute 특성을 형식에 적용합니다. 클래스, 구조체 또는 인터페이스에서 XAML에 대한 형식 변환기를 정의할 수 있습니다. 열거형에 대한 형식 변환은 제공할 필요가 없습니다. 이 변환은 기본적으로 사용하도록 설정됩니다.

형식 변환기는 태그에서 특성 또는 초기화 텍스트에 사용되는 문자열에서 원하는 대상 형식으로 변환할 수 있어야 합니다. 자세한 내용은 TypeConverters 및 XAML을 참조하세요.

형식의 모든 값에 적용하는 대신 특정 속성에서 XAML에 대한 형식 변환기 동작을 설정할 수도 있습니다. 이 경우 TypeConverterAttribute를 속성 정의(특정 getset 정의가 아닌 외부 정의)에 적용합니다.

XAML 사용을 지원하는 get 메서드 접근자에 TypeConverterAttribute을 적용하여 사용자 지정 연결 가능 멤버의 XAML 사용에 대한 형식 변환기 동작을 할당할 수 있습니다.

TypeConverter와 마찬가지로 TypeConverterAttribute는 XAML 존재 이전에 .NET에 존재했으며 형식 변환기 모델은 다른 용도로 사용되었습니다. TypeConverterAttribute를 참조 및 사용하려면 해당 항목을 정규화하거나 System.ComponentModelusing 문을 제공해야 합니다. 또한 프로젝트에 시스템 어셈블리를 포함합니다.

UidPropertyAttribute

참조 설명서: UidPropertyAttribute

적용 대상: 클래스

인수: 이름으로 관련 속성을 참조하는 문자열.

x:Uid 지시문을 별칭하는 클래스의 CLR 속성을 나타냅니다.

UsableDuringInitializationAttribute

참조 설명서: UsableDuringInitializationAttribute

적용 대상: 클래스

인수: 부울. 특성의 의도된 용도로 사용되는 경우 값을 true로 설정해야 합니다.

형식이 XAML 개체 그래프를 만드는 동안 하향식으로 빌드되는지 여부를 나타냅니다. 이는 프로그래밍 모델의 정의와 밀접하게 관련될 수 있는 고급 개념입니다. 자세한 내용은 UsableDuringInitializationAttribute를 참조하세요.

ValueSerializerAttribute

참조 설명서: ValueSerializerAttribute

적용 대상: 클래스, 속성, 메서드(유일한 XAML 유효 메서드 사례는 연결 가능한 멤버를 지원하는 get 접근자).

인수: 특성이 지정된 형식의 모든 속성 또는 특정 특성이 지정된 속성을 직렬화할 때 사용할 값 직렬 변환기 지원 클래스를 지정하는 Type.

ValueSerializerTypeConverter보다 많은 상태 및 컨텍스트가 필요한 값 직렬화 클래스를 지정합니다. ValueSerializer는 연결 가능한 멤버에 대한 정적 get 접근자 메서드에 ValueSerializerAttribute 특성을 적용하여 연결 가능한 멤버와 연결할 수 있습니다. 값 직렬화는 열거형, 인터페이스 및 구조체에도 적용할 수 있지만 대리자에는 적용되지 않습니다.

WhitespaceSignificantCollectionAttribute

참조 설명서: WhitespaceSignificantCollectionAttribute

적용 대상: 클래스, 특히 혼합 콘텐츠를 호스트해야 하는 컬렉션 형식. 여기서 개체 요소 주위의 공백은 UI 표현에 유효할 수 있습니다.

인수: 없음.

WhitespaceSignificantCollectionAttribute는 XAML 프로세서가 컬렉션 형식에서 공백을 유효하게 처리함을 나타냅니다. 이는 컬렉션 내에서 XAML 노드 스트림의 값 노드 생성에 영향을 줍니다. 자세한 내용은 XAML의 공백 처리를 참조하세요.

XamlDeferLoadAttribute

참조 설명서: XamlDeferLoadAttribute

적용 대상: 클래스, 속성.

인수: 두 가지 특성 형식, 즉 문자열 또는 Type 형식을 지원합니다. XamlDeferLoadAttribute을 참조하세요.

클래스 또는 속성에 XAML에 대한 지연된 로드 사용(예: 템플릿 동작)이 있음을 나타내고 지연 동작 및 해당 대상/콘텐츠 형식을 사용하도록 설정하는 클래스를 보고합니다.

XamlSetMarkupExtensionAttribute

참조 설명서: XamlSetMarkupExtensionAttribute

적용 대상: 클래스

인수: 콜백을 명명합니다.

클래스가 태그 확장을 사용하여 하나 이상의 속성에 대한 값을 제공할 수 있음을 나타내고, XAML 작성기가 클래스의 속성에 대한 태그 확장 집합 작업을 수행하기 전에 호출해야 하는 처리기를 참조합니다.

XamlSetTypeConverterAttribute

참조 설명서: XamlSetTypeConverterAttribute

적용 대상: 클래스

인수: 콜백을 명명합니다.

클래스가 형식 변환기를 사용하여 하나 이상의 속성에 대한 값을 제공할 수 있음을 나타내고, XAML 작성기가 클래스의 속성에 대한 형식 변환기 집합 작업을 수행하기 전에 호출해야 하는 처리기를 참조합니다.

XmlLangPropertyAttribute

참조 설명서: XmlLangPropertyAttribute

적용 대상: 클래스

인수: 특성이 지정된 형식에서 xml:lang에 별칭을 지정하기 위한 속성의 이름을 지정하는 문자열.

XmlLangPropertyAttribute는 XML lang 지시문에 매핑되는 특성이 지정된 형식의 속성을 보고합니다. 이 속성은 반드시 String 형식은 아니지만 문자열에서 할당할 수 있어야 합니다(형식 변환기를 속성의 형식 또는 특정 속성과 연결하여 할당할 수 있음). 속성은 읽기/쓰기여야 합니다.

xml:lang 매핑 시나리오는 런타임 개체 모델이 특별히 XMLDOM을 사용하여 처리하지 않고 XML 지정 언어 정보에 액세스할 수 있도록 하는 것입니다.

정의는 정의 형식에 할당할 수 있는 모든 파생 형식에 상속됩니다. 일반적인 시나리오는 아니지만 특정 파생 형식에서 XmlLangPropertyAttribute를 적용하여 특정 파생 형식에 대한 정의를 재정의할 수 있습니다.

다음 섹션에서는 형식 또는 멤버 정의에 적용되지 않고 대신 어셈블리에 적용되는 XAML 관련 특성에 대해 설명합니다. 이러한 특성은 XAML에서 사용할 사용자 지정 형식이 포함된 라이브러리를 정의한다는 전반적인 목표와 관련이 있습니다. 일부 특성은 XAML 노드 스트림에 직접 영향을 주지는 않고 다른 소비자가 사용할 노드 스트림에 전달됩니다. 이 정보의 소비자에는 XAML 네임스페이스 정보 및 관련 접두사 정보가 필요한 디자인 환경 또는 직렬화 프로세스가 포함됩니다. XAML 스키마 컨텍스트(.NET XAML 서비스 기본값 포함)도 이 정보를 사용합니다.

XmlnsCompatibleWithAttribute

참조 설명서: XmlnsCompatibleWithAttribute

인수:

  • 포함할 XAML 네임스페이스의 식별자를 지정하는 문자열.

  • 이전 인수의 XAML 네임스페이스를 포함할 수 있는 XAML 네임스페이스의 식별자를 지정하는 문자열.

    XmlnsCompatibleWithAttribute는 XAML 네임스페이스가 다른 XAML 네임스페이스에 포함될 수 있음을 지정합니다. 일반적으로 포함하는 XAML 네임스페이스는 미리 정의된 XmlnsDefinitionAttribute에 표시됩니다. 이 기술은 라이브러리에서 XAML 어휘의 버전을 지정하고 이전 버전의 어휘에 대해 이미 정의된 태그와 호환되도록 하는 데 사용할 수 있습니다.

XmlnsDefinitionAttribute

참조 설명서: XmlnsDefinitionAttribute

인수:

  • 정의할 XAML 네임스페이스의 식별자를 지정하는 문자열.

  • CLR 네임스페이스의 이름을 지정하는 문자열. CLR 네임스페이스는 어셈블리에서 공용 형식을 정의해야 하며, CLR 네임스페이스 형식 중 하나 이상이 XAML 사용을 위한 것이어야 합니다.

    XmlnsDefinitionAttribute는 XAML 네임스페이스 및 CLR 네임스페이스 간 어셈블리별 기반에서 매핑을 지정합니다. 지정된 매핑은 XAML 개체 작성기 또는 XAML 스키마 컨텍스트에서 형식 확인에 사용됩니다.

    둘 이상의 XmlnsDefinitionAttribute를 어셈블리에 적용할 수 있습니다. 이렇게 하는 다음과 같은 경우의 조합 때문일 수 있습니다.

  • 라이브러리 디자인에 런타임 API 액세스의 논리적 구성을 위한 여러 CLR 네임스페이스가 포함되어 있지만 동일한 XAML 네임스페이스를 참조하여 해당 네임스페이스의 모든 형식을 XAML에서 사용할 수 있도록 하려는 경우. 이 경우 XmlNamespace 값은 같지만 ClrNamespace 값은 다르게 사용하여 여러 XmlnsDefinitionAttribute 특성을 적용합니다. 이는 프레임워크 또는 애플리케이션이 일반적인 사용에서 기본 XAML 네임스페이스로 사용할 XAML 네임스페이스에 대한 매핑을 정의하는 경우에 특히 유용합니다.

  • 라이브러리 디자인에 여러 CLR 네임스페이스가 포함되어 있고 이러한 CLR 네임스페이스에서 형식의 사용 간에 의도적으로 XAML 네임스페이스를 분리하려는 경우.

  • 어셈블리에서 CLR 네임스페이스를 정의하고 둘 이상의 XAML 네임스페이스를 통해 액세스할 수 있도록 하려는 경우. 이 시나리오는 동일한 코드베이스를 사용하여 여러 어휘를 지원할 때 발생합니다.

  • 하나 이상의 CLR 네임스페이스에서 XAML 언어 지원을 정의하는 경우. 이 경우 XmlNamespace 값은 http://schemas.microsoft.com/winfx/2006/xaml이어야 합니다.

XmlnsPrefixAttribute

참조 설명서: XmlnsPrefixAttribute

인수:

  • XAML 네임스페이스의 식별자를 지정하는 문자열.

  • 권장 접두사를 지정하는 문자열.

    XmlnsDefinitionAttribute는 XAML 네임스페이스에 사용할 권장 접두사를 지정합니다. 접두사는 .NET XAML Services XamlXmlWriter로 직렬화된 XAML 파일에서 요소 및 특성을 작성하는 경우 또는 XAML 구현 라이브러리가 XAML 편집 기능이 있는 디자인 환경과 상호 작용하는 경우에 유용합니다.

    둘 이상의 XmlnsPrefixAttribute를 어셈블리에 적용할 수 있습니다. 이렇게 하는 다음과 같은 경우의 조합 때문일 수 있습니다.

  • 어셈블리가 둘 이상의 XAML 네임스페이스에 대한 형식을 정의하는 경우. 이 경우 각 XAML 네임스페이스에 서로 다른 접두사 값을 정의합니다.

  • 여러 어휘를 지원하고 각 어휘 및 XAML 네임스페이스에 서로 다른 접두사를 사용하는 경우.

  • 어셈블리에서 XAML 언어 지원을 정의하고 http://schemas.microsoft.com/winfx/2006/xamlXmlnsDefinitionAttribute를 사용하는 경우. 이 경우 일반적으로 접두사 x를 승격해야 합니다.

참고

.NET XAML 서비스는 XAML 관련 특성 RootNamespaceAttribute도 정의합니다. 이 특성은 프로젝트 시스템 지원을 위한 어셈블리 수준 특성이며 XAML 사용자 지정 형식과는 관련이 없습니다.

참고 항목