다음을 통해 공유


Control.DefaultStyleKey 속성

정의

컨트롤의 기본 스타일을 참조하는 키를 가져오거나 설정합니다. 사용자 지정 컨트롤 작성자는 이 속성을 사용하여 컨트롤에서 사용하는 스타일의 기본값을 변경합니다.

protected:
 property Platform::Object ^ DefaultStyleKey { Platform::Object ^ get(); void set(Platform::Object ^ value); };
IInspectable DefaultStyleKey();

void DefaultStyleKey(IInspectable value);
protected object DefaultStyleKey { get; set; }
Protected Property DefaultStyleKey As Object

속성 값

Object

Platform::Object

IInspectable

컨트롤의 기본 스타일을 참조하는 키입니다. 테마 스타일 조회의 일부로 올바르게 작동하려면 이 값이 System.Type 값이어야 합니다.

참고

Visual C++ 구성 요소 확장(C++/CX)은 형식의 정규화된 이름인 문자열을 사용합니다. 그러나 XAML 컴파일러에서 액세스한 후 TypeName 을 생성하는 생성된 코드에 의존합니다. 설명을 참조하세요.

설명

DefaultStyleKey는 Windows 런타임 API에서 보호되는 몇 안 되는 속성 중 하나입니다. 일부 기존 컨트롤 클래스를 서브클래싱하므로 이 속성을 설정하는 데 필요한 액세스 권한이 있는 컨트롤 작성자만 사용할 수 있습니다. DefaultStyleKey를 설정하는 많은 사용자 지정 컨트롤 시나리오의 경우 OnApplyTemplate도 재정의합니다.

DefaultStyleKey의 반환 형식은 구문에서 Object 로 느슨하게 입력되지만 XAML 스타일 시스템에서는 값이 형식 참조를 제공할 것으로 예상합니다.

  • C#으로 작성된 논리가 있는 컨트롤의 경우 DefaultStyleKey 값은 System.Type의 instance 합니다. 일반적으로 기본 생성자에서 이 값을 설정합니다.
public CustomControl1()
{
    this.DefaultStyleKey = typeof(CustomControl1);
}
CustomControl1::CustomControl1() // public: in the header.
{
	DefaultStyleKey(winrt::box_value(L"App1.CustomControl1"));
}
  • Visual C++ 구성 요소 확장(C++/CX)으로 작성된 논리가 있는 컨트롤의 경우 DefaultStyleKey 값은 사용자 지정 컨트롤 클래스의 이름인 네임스페이스 정규화된 문자열이어야 합니다. 일반적으로 기본 생성자에서 이 값을 설정합니다.
CustomControl1::CustomControl1() //public: in the header
{
    DefaultStyleKey = "App1.CustomControl1";
}

참고

궁극적으로 문자열만으로는 Visual C++ 구성 요소 확장(C++/CX) 형식 참조를 지원하기에 충분하지 않습니다. 솔루션 탐색기 추가/새 항목/템플릿 컨트롤 옵션을 사용하는 경우 Visual C++ 구성 요소 확장(C++/CX) 및 XAML에 대한 템플릿 및 지원은 IXamlMetadataProvider 정보를 제공하는 클래스를 생성합니다. XAML 컴파일러는 XAML이 로드될 때 이 코드에 액세스할 수 있으며, 이를 사용하여 형식 및 멤버의 유효성을 검사하고 만들고 부분 클래스를 조인합니다. 사용자 고유의 앱 코드에서 정의한 내용과 관련하여 문자열만 있으면 됩니다. 그러나 궁금한 경우 XamlTypeInfo.g.h 및 생성된 XamlTypeInfo.g.cpp 파일을 살펴볼 수 있습니다.

컨트롤 작성자는 DefaultStyleKey에 대한 값을 제공하지 않도록 선택할 수 있지만 일반적이지는 않습니다. 그 결과 기본 스타일은 기본 클래스에 정의된 스타일입니다. 일부 경우(예: ContentControl의 경우) 값은 null입니다. 값을 다시 정의하지 않도록 선택하더라도 원래 기본 스타일이 컨트롤을 렌더링하는 데 유용한지 확인합니다.

XAML 컨트롤이 로드되면 렌더링 프로세스가 시작되고 시스템에서 적용할 올바른 템플릿을 찾고 있습니다. 로드되는 항목은 해당 템플릿을 포함하여 컨트롤의 XAML 기본 스타일입니다. Windows 런타임 포함된 은 Windows 런타임 정의하는 모든 XAML 컨트롤에 대한 모든 기본 스타일의 내부 복사본입니다. DefaultStyleKey의 형식 참조는 XAML 리소스라는 이름을 이 스타일로 로드하도록 시스템에 지시합니다. XAML 형식에서는 형식 참조를 명시적으로 정의하는 메커니즘이 Windows 런타임 없더라도 스타일이 형식별로 키 지정됩니다. 그러나 조회 키를 보유하는 특성인 TargetType 값의 경우 문자열 형식의 형식 참조를 나타내는 것으로 암시적으로 가정됩니다. 예를 들어 Button의 DefaultStyleKey는 이름이 "Button"이고 FullName이 "Windows.UI.Xaml.Controls.Button"인 System.Type instance. 시스템은 이 정보를 사용하여 가 있는 내부 리소스에서 Style을 로드합니다.TargetType="Button"

사용자 지정 컨트롤은 일반적으로 기본 XAML 네임스페이스에 있지 않습니다. 대신 앱의 코드 네임스페이스를 참조하는 using: 문이 있는 XAML 네임스페이스에 있습니다. 기본적으로 프로젝트는 이 네임스페이스를 매핑하는 접두사 "local:"을 만듭니다. 다른 XAML 네임스페이스를 매핑하여 앱이 정의하는 컨트롤 또는 기타 코드에 대한 추가 코드 네임스페이스를 참조할 수도 있습니다.

"local:" 접두사(또는 앱의 코드 및 네임스페이스에 매핑되는 다른 네임스페이스)는 XAML에 TargetType 값으로 있는 경우 사용자 지정 컨트롤의 이름 앞에 와야 합니다. 이 작업은 시작 템플릿을 통해 이미 수행됩니다. 새 컨트롤을 추가하면 스타일이 하나만 포함된 generic.xaml 파일이 표시됩니다. 해당 스타일에는 "local:"으로 시작하고 사용자 지정 컨트롤 클래스에 대해 선택한 이름으로 완료된 문자열인 TargetType 값이 있습니다. 정의에서 CustomControl1 DefaultStyleKey를 설정한 이전 예제와 일치하려면 generic.xaml 시작에 정의된 에 대한 <Style TargetType="local:CustomControl1"> 요소가 표시되고 해당 스타일은 컨트롤 템플릿을 정의하고 다른 속성을 설정합니다.

참고

"local:" 접두사는 정의되고 사용되는 XAML로 격리됩니다. XAML 네임스페이스와 접두사는 XAML 내에서만 의미가 있으며 각 XAML 파일에 자체 포함됩니다. 코드의 DefaultStyleKey 값에는 접두사를 포함하지 않습니다.

적용 대상

추가 정보