HeaderedContentControl

HeaderedContentControl

我想创建一个简单的控件,它继承自 HeaderedContentControl,并具有一些称为 Title、Subtitle、Icon 的基本依赖属性。我希望能够提供数据绑定(bind)这些属性的默认 header 模板。对于本示例,我将此类命名为 HeaderedView。

我无法提供可以绑定(bind)到 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 的原因)。

每次我似乎都想继承这个控件时,我似乎都在为实现而苦苦挣扎。任何帮助将不胜感激!

最佳答案

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

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

此外,如果您只打算更改 HeaderTemplate,那么您不需要首先覆盖模板。默认的 HeaderedContentControl 将适本地应用您的 HeaderTemplate。

关于WPF:从 HeaderedContentControl 继承,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1100844/

10-12 16:45