2009-07-08 3 views
3

Я хотел бы создать простой элемент управления, который наследуется от HeaderedContentControl, и имеет некоторые основные свойства зависимостей называемые заголовок, подзаголовок, Icon. Я хотел бы иметь возможность предоставить шаблон заголовка по умолчанию, который привязывает эти свойства к данным. В этом примере я назвал этот класс 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. Вы должны быть в состоянии сделать это для того, чтобы увидеть ваш заказ HeaderTemplate применяется:

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

Кроме того, если вы только планируете изменение HeaderTemplate, то вам не нужно переопределить шаблон в первую очередь , По умолчанию HeaderedContentControl применит ваш HeaderTemplate соответствующим образом.

Смежные вопросы