2009-07-08 4 views
3

HeaderedContentControl에서 상속하는 간단한 컨트롤을 만들고 Title, Subtitle, Icon이라는 기본 종속성 속성이 있습니다. 이러한 속성을 databind하는 기본 헤더 템플릿을 제공 할 수 있기를 바랍니다. 이 예제에서는이 클래스의 이름을 HeaderedView로 지정했습니다.WPF : HeaderedContentControl에서 상속

HeaderedView에 정의 된 속성에 바인딩 할 수있는 기본 헤더 템플릿을 제공하는 데 문제가 있습니다. 나는 다음과 같은 마크 업을 실험하고 있습니다 :

<Style TargetType="{x:Type local:HeaderedView}"> 
    <Setter Property="Template"> 
     <Setter.Value> 
      <ControlTemplate TargetType="{x:Type HeaderedContentControl}"> 
       <StackPanel> 
        <Grid> 
         <ContentPresenter ContentSource="Header"/> 
        </Grid> 
        <Grid> 
         <ContentPresenter ContentSource="Content"/> 
        </Grid> 
       </StackPanel> 
      </ControlTemplate> 
     </Setter.Value> 
    </Setter> 
    <Setter Property="HeaderTemplate"> 
     <Setter.Value> 
      <DataTemplate> 
       <Grid> 
        <TextBlock Text="{TemplateBinding local:HeaderedView.Title}" /> 
       </Grid>      
      </DataTemplate> 
     </Setter.Value> 
    </Setter> 
</Style> 

불행하게도, 제목이 표시되지 않습니다.

헤더 템플릿은 교체 가능해야합니다 (HeaderedContentControl을 사용하려는 이유입니다).

이 컨트롤을 상속하고 싶을 때마다 구현과 어려움을 겪는 것처럼 보입니다. 어떤 도움이라도 대단히 감사하겠습니다!

답변

4

템플릿에서 ContentPresenter를 사용하여 머리글을 표시하지만 ContentPresenter에게 HeaderTemplate을 사용해야한다고 말하지 않습니다.

<ContentPresenter ContentSource="Header" ContentTemplate="{TemplateBinding HeaderTemplate}" /> 

또한, 당신은 단지는 HeaderTemplate 변경에 대한 계획이라면, 당신은 첫번째 장소에있는 템플릿을 재정의 할 필요가 없습니다 : 당신은 당신의 정의는 HeaderTemplate 적용을 참조하기 위해이 작업을 수행 할 수 있어야한다 . 기본 HeaderedContentControl은 HeaderTemplate을 적절하게 적용합니다.