我想创建一个继承自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的原因。)
每当我似乎想要从这个控件继承时,我似乎都在努力实现。任何帮助将不胜感激!
答案 0 :(得分:5)
在您的模板中,您使用的是ContentPresenter来显示标题,但您没有告诉ContentPresenter它需要使用HeaderTemplate。您应该能够执行此操作以查看应用的自定义HeaderTemplate:
<ContentPresenter ContentSource="Header" ContentTemplate="{TemplateBinding HeaderTemplate}" />
另外,如果您只打算更改HeaderTemplate,那么您不需要首先覆盖模板。默认的HeaderedContentControl将适当地应用你的HeaderTemplate。