다음을 통해 공유


ControlTemplate 클래스

정의

컨트롤의 컨트롤 템플릿으로 사용되는 요소 트리를 정의합니다.

public ref class ControlTemplate sealed : FrameworkTemplate
/// [Windows.Foundation.Metadata.Activatable(65536, Windows.Foundation.UniversalApiContract)]
/// [Windows.Foundation.Metadata.ContractVersion(Windows.Foundation.UniversalApiContract, 65536)]
/// [Windows.Foundation.Metadata.MarshalingBehavior(Windows.Foundation.Metadata.MarshalingType.Agile)]
/// [Windows.Foundation.Metadata.Threading(Windows.Foundation.Metadata.ThreadingModel.Both)]
class ControlTemplate final : FrameworkTemplate
/// [Windows.Foundation.Metadata.ContractVersion(Windows.Foundation.UniversalApiContract, 65536)]
/// [Windows.Foundation.Metadata.MarshalingBehavior(Windows.Foundation.Metadata.MarshalingType.Agile)]
/// [Windows.Foundation.Metadata.Threading(Windows.Foundation.Metadata.ThreadingModel.Both)]
/// [Windows.Foundation.Metadata.Activatable(65536, "Windows.Foundation.UniversalApiContract")]
class ControlTemplate final : FrameworkTemplate
[Windows.Foundation.Metadata.Activatable(65536, typeof(Windows.Foundation.UniversalApiContract))]
[Windows.Foundation.Metadata.ContractVersion(typeof(Windows.Foundation.UniversalApiContract), 65536)]
[Windows.Foundation.Metadata.MarshalingBehavior(Windows.Foundation.Metadata.MarshalingType.Agile)]
[Windows.Foundation.Metadata.Threading(Windows.Foundation.Metadata.ThreadingModel.Both)]
public sealed class ControlTemplate : FrameworkTemplate
[Windows.Foundation.Metadata.ContractVersion(typeof(Windows.Foundation.UniversalApiContract), 65536)]
[Windows.Foundation.Metadata.MarshalingBehavior(Windows.Foundation.Metadata.MarshalingType.Agile)]
[Windows.Foundation.Metadata.Threading(Windows.Foundation.Metadata.ThreadingModel.Both)]
[Windows.Foundation.Metadata.Activatable(65536, "Windows.Foundation.UniversalApiContract")]
public sealed class ControlTemplate : FrameworkTemplate
Public NotInheritable Class ControlTemplate
Inherits FrameworkTemplate
<ControlTemplate ...>
    templateRootElement
</ControlTemplate>
상속
Object Platform::Object IInspectable DependencyObject FrameworkTemplate ControlTemplate
특성

Windows 요구 사항

디바이스 패밀리
Windows 10 (10.0.10240.0에서 도입되었습니다.)
API contract
Windows.Foundation.UniversalApiContract (v1.0에서 도입되었습니다.)

예제

다음 예제에서는 단추에 대한 간단한 ControlTemplate을 만듭니다. 컨트롤 템플릿에는 하나의 Grid 가 포함되어 있으며 다음 동작을 지정합니다.

  • 사용자가 단추 위에 마우스를 놓으면 그리드 가 1초 동안 녹색에서 빨간색으로 변경됩니다.
  • 사용자가 단추에서 마우스를 이동하면 그리드 가 즉시 녹색으로 다시 변경됩니다.
<ControlTemplate TargetType="Button">
  <Grid >
    <VisualStateManager.VisualStateGroups>
      <VisualStateGroup x:Name="CommonStates">

        <VisualStateGroup.Transitions>

          <!--Take one half second to transition to the PointerOver state.-->
          <VisualTransition To="PointerOver" 
                              GeneratedDuration="0:0:0.5"/>
        </VisualStateGroup.Transitions>
        
        <VisualState x:Name="Normal" />

        <!--Change the SolidColorBrush, ButtonBrush, to red when the
            Pointer is over the button.-->
        <VisualState x:Name="PointerOver">
          <Storyboard>
            <ColorAnimation Storyboard.TargetName="ButtonBrush" 
                            Storyboard.TargetProperty="Color" To="Red" />
          </Storyboard>
        </VisualState>
      </VisualStateGroup>
    </VisualStateManager.VisualStateGroups>
    <Grid.Background>
      <SolidColorBrush x:Name="ButtonBrush" Color="Green"/>
    </Grid.Background>
  </Grid>
</ControlTemplate>

generic.xaml 파일에서 각 XAML 컨트롤에 대한 전체 템플릿을 볼 수 있습니다. 이 파일은 (Program Files)\Windows Kits\10\DesignTime\CommonConfiguration\Neutral\UAP<SDK version>\Generic 폴더에 있습니다.

설명

자세한 정보 및 예제는 XAML 컨트롤 템플릿을 참조하세요.

ControlTemplate은 템플릿을 적용하여 컨트롤의 시각적 개체를 정의하는 Control.Template 속성의 값으로 사용됩니다. Setter를 사용하여 Control.Template을 설정하는 스타일과 동일한 암시적 키 TargetType을 사용하여 거의 항상 ControlTemplate을 XAML 리소스로 정의합니다. 컨트롤 instance 직접 Control.Template 값을 할당하는 경우는 거의 없습니다.

ControlTemplate을 정의할 때 사용하는 속성은 TargetType 및 암시적 XAML 콘텐츠 두 개뿐입니다. ControlTemplate은 FrameworkTemplate 부모로부터 암시적 XAML 콘텐츠 동작을 상속합니다. 기본적으로 XAML에 정의된 ControlTemplate 내에 포함된 요소는 템플릿을 정의하는 XAML 요소의 추가 구조에 대한 루트 요소를 할당합니다. 이는 이후에 코드에서 검사할 수 없고 XAML 파서가 해당 템플릿 적용에 따라 컨트롤에 콘텐츠를 할당하는 방법에 대해서만 의미가 있는 "템플릿" 속성을 설정하는 것입니다.

ControlTemplate에서 콘텐츠를 설정하려면 Control.Template 속성이 있도록 컨트롤 요소가 true Control 하위 클래스여야 합니다. 템플릿이 콘텐츠를 적용하는 다른 경우가 있지만 일반적으로 다른 FrameworkTemplate 파생 템플릿 클래스(DataTemplate 또는 ItemsPanelTemplate) 중 하나가 포함됩니다.

컨트롤 템플릿은 앱의 UI에 표시되는 컨트롤의 instance 구성하는 시각적 개체와 파트를 제공합니다. 런타임에 템플릿이 이미 적용되었으므로 템플릿에서 생성된 모든 부분은 이제 컨트롤의 진정한 부분이며 컨트롤 콘텐츠 내에서 XAML 이름 범위를 검사하거나 VisualTreeHelper 클래스를 사용하는 등의 기술로 액세스할 수 있습니다. 입력 이벤트와 같은 이벤트는 적용된 컨트롤 템플릿에서 온 컨트롤의 부분을 노출하는 경우가 있습니다.

템플릿이 특정 컨트롤 instance 적용되기 전이나 후에 템플릿 정의 콘텐츠에 액세스하는 방법이 있습니다. OnApplyTemplate 또는 GetTemplateChild를 참조하세요.

ControlTemplate이 컨트롤 instance 적용되는 실제 시점은 OnApplyTemplate 보호된 가상 메서드를 호출하기 때문에 검색할 수 있습니다. 컨트롤이 봉인되지 않는 한 OnApplyTemplate을 재정의할 수 있도록 컨트롤을 서브클래스할 수 있습니다. 이 재정의는 템플릿이 적용되기 전에는 가능하지 않은 작업을 수행하도록 작성할 수 있습니다. 예를 들어 이벤트 처리기를 연결하여 파트를 제어하거나 컨트롤 속성을 설정하여 템플릿에서 만들어졌지만 {TemplateBinding} 태그 확장 값으로 시작하지 않은 개체 부분을 참조할 수 있습니다.

생성자

ControlTemplate()

ControlTemplate 클래스의 새 instance 초기화합니다.

속성

Dispatcher

이 개체가 연결된 CoreDispatcher 를 가져옵니다. CoreDispatcher는 코드가 비 UI 스레드에서 시작되더라도 UI 스레드에서 DependencyObject에 액세스할 수 있는 기능을 나타냅니다.

(다음에서 상속됨 DependencyObject)
TargetType

ControlTemplate이 적용되는 형식을 가져오거나 설정합니다.

메서드

ClearValue(DependencyProperty)

종속성 속성의 로컬 값을 지웁니다.

(다음에서 상속됨 DependencyObject)
GetAnimationBaseValue(DependencyProperty)

애니메이션이 활성화되지 않은 경우에 적용되는 종속성 속성에 대해 설정된 기본 값을 반환합니다.

(다음에서 상속됨 DependencyObject)
GetValue(DependencyProperty)

DependencyObject에서 종속성 속성의 현재 유효 값을 반환합니다.

(다음에서 상속됨 DependencyObject)
ReadLocalValue(DependencyProperty)

로컬 값이 설정된 경우 종속성 속성의 로컬 값을 반환합니다.

(다음에서 상속됨 DependencyObject)
RegisterPropertyChangedCallback(DependencyProperty, DependencyPropertyChangedCallback)

DependencyObject instance 특정 DependencyProperty에 대한 변경 내용을 수신 대기하기 위한 알림 함수를 등록합니다.

(다음에서 상속됨 DependencyObject)
SetValue(DependencyProperty, Object)

DependencyObject에 대한 종속성 속성의 로컬 값을 설정합니다.

(다음에서 상속됨 DependencyObject)
UnregisterPropertyChangedCallback(DependencyProperty, Int64)

RegisterPropertyChangedCallback을 호출하여 이전에 등록된 변경 알림을 취소합니다.

(다음에서 상속됨 DependencyObject)

적용 대상

추가 정보