WPF: Наследование от HeaderedContentControl - PullRequest
3 голосов
/ 09 июля 2009

Я хотел бы создать простой элемент управления, который наследуется от HeaderedContentControl и имеет некоторые базовые свойства зависимостей, такие как Title, Subtitle, Icon. Я хотел бы иметь возможность предоставить шаблон заголовка по умолчанию, который связывает эти свойства с данными. Для этого примера я назвал этот класс HeaderedView.

У меня проблемы с предоставлением шаблона заголовка по умолчанию, который можно привязать к свойствам, определенным в 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).

Каждый раз, когда мне кажется, что я хочу унаследовать этот элемент управления, мне кажется, что я борюсь с реализацией. Любая помощь будет принята с благодарностью!

1 Ответ

5 голосов
/ 09 июля 2009

В вашем шаблоне вы используете ContentPresenter для отображения заголовка, но вы не говорите ContentPresenter, что ему нужно использовать HeaderTemplate. Вы должны быть в состоянии сделать это для того, чтобы увидеть примененный вами пользовательский шаблон HeaderTemplate:

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

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

...