代码之家  ›  专栏  ›  技术社区  ›  Brad Leach

WPF:从HeaderedContentControl继承

  •  3
  • Brad Leach  · 技术社区  · 16 年前

    我想创建一个继承自HeaderedContentControl的简单控件,它具有一些基本的依赖属性,称为标题、副标题和图标。我希望能够提供数据绑定这些属性的默认头模板。对于这个例子,我将这个类命名为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 回复  |  直到 16 年前
        1
  •  4
  •   mjeanes    16 年前

    在模板中,您使用ContentPresenter来显示标题,但您没有告诉ContentPresenter它需要使用HeaderTemplate。您应该能够这样做,以便看到您的自定义headerTemplate应用:

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

    另外,如果您只打算更改headertemplate,那么首先不需要重写模板。默认的headeredContentControl将适当地应用headerTemplate。

    推荐文章