FrameworkElement.OnApplyTemplate 메서드
정의
중요
일부 정보는 릴리스되기 전에 상당 부분 수정될 수 있는 시험판 제품과 관련이 있습니다. Microsoft는 여기에 제공된 정보에 대해 어떠한 명시적이거나 묵시적인 보증도 하지 않습니다.
애플리케이션 코드 또는 내부 프로세스(예: 다시 빌드 레이아웃 패스)가 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 런타임 논리가 특히 컨트롤용이기 때문입니다. ContentPresenter 및 ContentControl에 대한 특수 템플릿 동작도 있습니다.
구현자에 대한 참고 사항
이 메서드의 기본 구현은 몇 가지 기본 레이아웃 논리를 제공하는 Windows 런타임 내부 동작으로 구현됩니다. 항상 구현에서 기본 구현을 호출해야 합니다. 기본 구현을 참조하지 못하면 바람직하지 않은 레이아웃 동작이 발생할 수 있습니다.
파생 클래스는 다음 시나리오에 대한 알림 또는 진입점으로 이 메서드를 사용할 수 있습니다.
- 사용자 지정 코드를 사용하여 시각적 트리의 나머지 부분을 빌드합니다.
- 템플릿의 XAML 정의 시각적 트리가 적용된 후에만 작동할 수 있는 코드를 실행합니다. 예를 들어 GetTemplateChild를 호출하여 템플릿에서 가져온 명명된 요소에 대한 참조를 가져오는 코드로, 이러한 파트의 멤버를 다른 템플릿 이후 런타임 코드에서 참조할 수 있습니다.
- 템플릿의 시각적 트리가 완료된 후에만 존재하는 것이 적합한 서비스를 소개합니다.
- 템플릿의 일부 또는 복합 컨트롤의 컨트롤 부모에 클래스 정의 이벤트 처리기를 연결합니다. 예를 들어 클래스 논리가 복합 컨트롤의 TextBox 템플릿 부분에서 라우트된 KeyDown 이벤트를 처리하도록 할 수 있습니다. 이렇게 하면 파트의 하위 수준 입력 이벤트에 따라 UI 상태가 업데이트되고 컨트롤에 특정하고 컨트롤 부모가 발생시키는 다른 이벤트가 대신 발생합니다.
- 다른 요소에 종속된 템플릿 내 요소의 상태 및 속성을 설정합니다. 예를 들어 속성 값은 부모 요소를 알고 있거나 특정 파생 클래스가 공통 템플릿을 사용하는 경우에만 검색할 수 있습니다. 그러나 잘 디자인된 컨트롤은 VisualStateManager를 사용하여 시각적 상태를 처리해야 합니다. 이 개념에 대한 자세한 내용은 빠른 시작: 템플릿 제어를 참조하세요.
OnApplyTemplate은 로드 된 이벤트보다 템플릿에서 만든 시각적 트리에 대한 조정을 처리하는 데 더 적합한 지점인 경우가 많습니다. Loaded 이벤트는 템플릿이 적용되기 전에 발생할 수 있으며 로드됨을 기준으로 시각적 트리가 불완전할 수 있습니다.