x:Subclass 지시문

x:Class도 제공되는 경우 XAML 태그 컴파일 동작을 수정합니다. x:Class에 기반하는 partial 클래스를 만드는 대신 제공된 x:Class가 중간 클래스로 만들어진 다음 제공된 파생 클래스가 x:Class에 기반할 것으로 예상됩니다.

XAML 특성 사용

<object x:Class="namespace.classname" x:Subclass="subclassNamespace.subclassName">
   ...
</object>

XAML 값

Description
namespace 선택 사항입니다. classname을 포함하는 CLR 네임스페이스를 지정합니다. namespace이(가) 지정된 경우 점(.)은 namespaceclassname을(를) 구분합니다.
classname 필수 사항입니다. 로드된 XAML 및 해당 XAML의 코드 숨김을 연결하는 partial 클래스의 CLR 이름을 지정합니다. 설명 부분을 참조하세요.
subclassNamespace 선택 사항입니다. 각 네임스페이스가 다른 네임스페이스를 확인할 수 있는 경우 namespace와 다를 수 있습니다. subclassName을 포함하는 CLR 네임스페이스를 지정합니다. subclassName이(가) 지정된 경우 점(.)은 subclassNamespacesubclassName을(를) 구분합니다.
subclassName 필수 사항입니다. 하위 클래스의 CLR 이름을 지정합니다.

종속성

x:Class 지시문도 동일한 개체에서 제공되어야 하며, 해당 개체는 XAML 프로덕션의 루트 요소여야 합니다.

설명

x:Subclass 사용은 주로 partial 클래스 선언을 지원하지 않는 언어를 위한 것입니다.

x:Subclass로 사용되는 클래스는 중첩된 클래스일 수 없으며, x:Subclass는 "종속성" 섹션에 설명된 대로 루트 개체를 참조해야 합니다.

그렇지 않을 경우 x:Subclass의 개념적 의미는 .NET XAML 서비스 구현에 의해 정의되지 않습니다. .NET XAML 서비스 동작이 XAML 태그와 지원 코드를 연결하는 전체 프로그래밍 모델을 지정하지 않기 때문입니다. x:Classx:Subclass와 관련된 추가 개념의 구현은 프로그래밍 모델이나 애플리케이션 모델을 사용하여 XAML 태그, 컴파일된 태그, CLR 기반 코드 숨김을 연결하는 방법을 정의하는 특정 프레임워크에 의해 수행됩니다. 각 프레임워크에는 일부 동작을 사용하도록 설정하는 자체 빌드 작업 또는 빌드 환경에 포함되어야 하는 특정 구성 요소가 있을 수 있습니다. 프레임워크 내에서 빌드 작업은 코드 숨김에 사용되는 특정 CLR 언어에 따라 달라질 수도 있습니다.

WPF 사용 정보

x:Subclass는 페이지 루트 또는 이미 x:Class가 있는 애플리케이션 정의의 Application 루트에 있을 수 있습니다. 페이지 또는 애플리케이션 루트 이외의 요소에서 x:Subclass를 선언하거나 x:Class가 존재하지 않는 위치에서 지정하면 컴파일 시간 오류가 발생합니다.

x:Subclass 시나리오에서 올바르게 작동하는 파생 클래스를 만들기는 상당히 복잡합니다. 중간 파일(.xaml 파일 이름을 통합하는 이름을 사용하여 태그 컴파일을 통해 프로젝트의 obj 폴더에서 생성된 .g 파일)을 검사해야 할 수 있습니다. 이러한 중간 파일은 컴파일된 애플리케이션의 조인된 partial 클래스에서 특정 프로그래밍 구문의 원본을 확인하는 데 도움이 될 수 있습니다.

컴파일 중에 중간 클래스에서 만들어지는 것으로 이벤트 처리기의 스텁을 재정의하려면 파생 클래스의 이벤트 처리기가 internal override(Microsoft Visual Basic에서 Friend Overrides)여야 합니다. 그렇지 않으면 파생 클래스 구현은 중간 클래스 구현을 숨기고(섀도), 중간 클래스 처리기는 호출되지 않습니다.

x:Classx:Subclass를 모두 정의하는 경우 x:Class에 의해 참조되는 클래스에 구현을 제공할 필요가 없습니다. 컴파일러가 중간 파일에서 만드는 클래스에 대한 몇 가지 지침을 포함하도록 x:Class 특성을 통해 이름을 지정하기만 하면 됩니다(이 경우 컴파일러는 기본 이름을 선택하지 않음). x:Class 클래스에 구현을 제공할 수 있지만, 이는 x:Classx:Subclass를 모두 사용하기 위한 일반적인 시나리오는 아닙니다.

참고 항목