다음을 통해 공유


FrameworkElement.OnApplyTemplate 메서드

정의

애플리케이션 코드 또는 내부 프로세스(예: 다시 빌드 레이아웃 패스)가 ApplyTemplate을 호출할 때마다 호출됩니다. 즉, UI 요소가 앱에 표시되기 직전에 메서드가 호출됩니다. 클래스의 기본 템플릿 후 논리에 영향을 주도록 이 메서드를 재정의합니다.

protected:
 virtual void OnApplyTemplate() = OnApplyTemplate;
void OnApplyTemplate();
protected virtual void OnApplyTemplate();
function onApplyTemplate()
Protected Overridable Sub OnApplyTemplate ()

예제

이 예제에서는 사용자 지정 컨트롤에 의해 정의된 OnApplyTemplate 재정의를 보여줍니다. 재정의는 템플릿 및 스타일 시스템을 통해 잠재적으로 자체 컨트롤 템플릿을 정의하고 적용하는 호출자를 고려하도록 설계되었습니다. 정의의 일부로 컨트롤은 "UpButton"과 같이 필요한 템플릿 내에서 명명된 요소의 특성을 지정합니다. 그런 다음 OnApplyTemplate은 템플릿이 로드될 때 이 명명 계약에 따라 개체 참조를 검색하고 GetTemplateChild를 호출합니다. (설정되는 값(예: "UpButtonElement")은 클래스의 다른 멤버가 런타임에 해당 부분을 개체로 참조할 수 있도록 클래스 수준에서 정의된 프라이빗 필드를 참조합니다. 또한 이 예제에서는 private 메서드 UpdateStates (정의가 표시되지 않음)를 호출합니다. OnApplyTemplate의 또 다른 일반적인 시나리오입니다. 이 경우 컨트롤의 정의된 모든 상태를 처리하고 GoToState 를 호출하여 적절한 상태를 설정하는 프라이빗 메서드를 호출하여 컨트롤의 시작 상태에 대해 시각적 상태가 설정되었는지 확인합니다.

protected override void OnApplyTemplate()
{
    UpButtonElement = GetTemplateChild("UpButton") as RepeatButton;
    DownButtonElement = GetTemplateChild("DownButton") as RepeatButton;
    TextElement = GetTemplateChild("TextBlock") as TextBlock;

    UpdateStates(false);
}
Protected Overloads Sub OnApplyTemplate()
    UpButtonElement = TryCast(GetTemplateChild("UpButton"), RepeatButton)
    DownButtonElement = TryCast(GetTemplateChild("DownButton"), RepeatButton)
    TextElement = TryCast(GetTemplateChild("TextBlock"), TextBlock)

    UpdateStates(False)
End Sub

설명

OnApplyTemplate은 FrameworkElement 클래스에 의해 정의된 메서드이지만 OnApplyTemplate 동작 및 OnApplyTemplate 재정의 시나리오는 주로 Control 하위 클래스와 관련이 있습니다. 이는 일반적으로 XAML 파일에서 정의하는 Template 속성과 템플릿을 적용하는 내부 Windows 런타임 논리가 특히 컨트롤용이기 때문입니다. ContentPresenterContentControl에 대한 특수 템플릿 동작도 있습니다.

구현자에 대한 참고 사항

이 메서드의 기본 구현은 몇 가지 기본 레이아웃 논리를 제공하는 Windows 런타임 내부 동작으로 구현됩니다. 항상 구현에서 기본 구현을 호출해야 합니다. 기본 구현을 참조하지 못하면 바람직하지 않은 레이아웃 동작이 발생할 수 있습니다.

파생 클래스는 다음 시나리오에 대한 알림 또는 진입점으로 이 메서드를 사용할 수 있습니다.

  • 사용자 지정 코드를 사용하여 시각적 트리의 나머지 부분을 빌드합니다.
  • 템플릿의 XAML 정의 시각적 트리가 적용된 후에만 작동할 수 있는 코드를 실행합니다. 예를 들어 GetTemplateChild를 호출하여 템플릿에서 가져온 명명된 요소에 대한 참조를 가져오는 코드로, 이러한 파트의 멤버를 다른 템플릿 이후 런타임 코드에서 참조할 수 있습니다.
  • 템플릿의 시각적 트리가 완료된 후에만 존재하는 것이 적합한 서비스를 소개합니다.
  • 템플릿의 일부 또는 복합 컨트롤의 컨트롤 부모에 클래스 정의 이벤트 처리기를 연결합니다. 예를 들어 클래스 논리가 복합 컨트롤의 TextBox 템플릿 부분에서 라우트된 KeyDown 이벤트를 처리하도록 할 수 있습니다. 이렇게 하면 파트의 하위 수준 입력 이벤트에 따라 UI 상태가 업데이트되고 컨트롤에 특정하고 컨트롤 부모가 발생시키는 다른 이벤트가 대신 발생합니다.
  • 다른 요소에 종속된 템플릿 내 요소의 상태 및 속성을 설정합니다. 예를 들어 속성 값은 부모 요소를 알고 있거나 특정 파생 클래스가 공통 템플릿을 사용하는 경우에만 검색할 수 있습니다. 그러나 잘 디자인된 컨트롤은 VisualStateManager를 사용하여 시각적 상태를 처리해야 합니다. 이 개념에 대한 자세한 내용은 빠른 시작: 템플릿 제어를 참조하세요.

OnApplyTemplate은 로드 이벤트보다 템플릿에서 만든 시각적 트리에 대한 조정을 처리하는 데 더 적합한 지점인 경우가 많습니다. Loaded 이벤트는 템플릿이 적용되기 전에 발생할 수 있으며 로드됨을 기준으로 시각적 트리가 불완전할 수 있습니다.

적용 대상

추가 정보