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);
}
  • Microsoft Visual Basic으로 작성된 논리가 있는 컨트롤의 경우 DefaultStyleKey 값은 System.Type의 instance 합니다. 일반적으로 기본 생성자에서 이 값을 설정합니다.
Public Sub New()
    Me.DefaultStyleKey = GetType(CustomControl1)
End Sub
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이 로드될 때 이 코드에 액세스할 수 있으며, 이를 사용하여 형식 및 멤버의 유효성을 검사하고 만들고 partial 클래스를 조인합니다. 사용자 고유의 앱 코드에서 정의한 내용에 한해 문자열만 있으면 됩니다. 그러나 궁금한 경우 생성된 XamlTypeInfo.g.h 및 XamlTypeInfo.g.cpp 파일을 살펴볼 수 있습니다.

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

XAML 컨트롤이 로드되면 렌더링 프로세스가 시작되고 시스템에서 적용할 올바른 템플릿을 찾고 있습니다. 로드되는 항목은 템플릿을 포함하여 컨트롤의 XAML 기본 스타일입니다. Windows 런타임 Windows 런타임 정의하는 모든 XAML 컨트롤에 대한 모든 기본 스타일의 내부 복사본이 포함되어 있습니다. DefaultStyleKey의 형식 참조는 이 스타일로 로드할 XAML 리소스라는 이름을 시스템에 알려줍니다. XAML 형식에서 스타일은 형식 참조를 명시적으로 정의하는 Windows 런타임 XAML에 메커니즘이 없더라도 형식별로 키가 지정됩니다. 그러나 조회 키를 보유하는 특성인 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를 설정한 이전 예제와 일치하려면 start generic.xaml에 정의된 에 대한 <Style TargetType="local:CustomControl1"> 요소가 표시되고 해당 스타일은 컨트롤 템플릿을 정의하고 다른 속성을 설정합니다.

참고

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

적용 대상

추가 정보