WPF:从HeaderedContentControl继承

Bra*_*ach 3 wpf wpf-controls

我想创建一个继承自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>
Run Code Online (Sandbox Code Playgroud)

不幸的是,标题没有被显示。

标头模板必须是可替换的(这就是为什么我要利用HeaderedContentControl的原因)。

每当我似乎想从该控件中继承时,我似乎都在为实现而苦恼。任何帮助将不胜感激!

mje*_*nes 5

在您的模板中,您正在使用ContentPresenter来显示Header,但是您并未告诉ContentPresenter它需要使用HeaderTemplate。您应该能够执行此操作,以查看您应用的自定义HeaderTemplate:

<ContentPresenter ContentSource="Header" ContentTemplate="{TemplateBinding HeaderTemplate}" />
Run Code Online (Sandbox Code Playgroud)

另外,如果您仅打算更改HeaderTemplate,则无需首先覆盖Template。默认的HeaderedContentControl将适当地应用您的HeaderTemplate。