2011-03-02 8 views
3

코드에서 ControlTemplate은 프레임 워크 요소 자체를 구성하는 데 사용할 수있는 FrameworkElementFactory의 계층 구조를 포함합니다. 그러나 XAML에서 ControlTemplate의 콘텐츠는 요소 자체로 나타납니다.ControlTemplate은 XAML에서 어떻게 인스턴스화됩니까?

XAML 파서가 한 개체 형식에서 다른 형식으로 변환하거나 ValueConverter이 사용 되었습니까? 아니면 ControlTemplate 콘텐츠를 구문 분석 할 때 실제로 팩토리를 생성합니까?

답변

3

코드에서 XAML로 정의 된 경우 실제로 다르게 수행됩니다. 확인하려면 WPF에서 단일 창을 사용하여 간단한 프로젝트를 만들고 기본 스타일로 XAML에 정의 된 ControlTemplate이있는 사용자 지정 컨트롤을 추가 할 수 있습니다. 그런 다음 창에 컨트롤을 추가하고 Click 처리기에 중단 점이 포함 된 Button을 추가합니다.

중단 점이 누적되면 사용자 정의 컨트롤을 검사 할 수 있으며 ControlTemplate입니다. VisualTree 속성 (FrameworkElementFactory)은 null입니다.

반사경을 사용하여 StyleHelper.ApplyTemplateContent 메소드에서 관련 코드를 볼 수 있습니다. 해당 메서드의 첫 번째 if 문은 FrameworkElementFactory (VisualTreeProperty에서 전달됨)를 적용합니다. 두 번째 if 문은 FrameworkTemplate.LoadOptimizedTemplateContent를 실행하는 XAML에서 ControlTemplate을로드합니다.

+0

좋은 설명. 고맙습니다. – mancaus

관련 문제