如何扩展DataTemplate以包含其他控件

时间:2016-07-21 19:39:15

标签: c# wpf datatemplate tabcontrol

所以我有一个样式,它为wpf TabControl做了一些奇特的事情,其中​​它设置了一个允许用户重命名标签的HeaderTemplate。我有一个基于此模板的样式,它根据某些参数为文本着色,我想根据某些条件在每个标签的标题中添加一个多边形。

所以基本样式如下:

<Style TargetType="TabItem" x:Key="EditableTabItemStyle" 
       BasedOn="{StaticResource BaseTabItemStyle}">
    <Setter Property="HeaderTemplate">
        <Setter.Value>
            <DataTemplate>
                <controls:EditableTabContent Template="{StaticResource EditableTabItemTemplate}"
                                             Content="{Binding Path=., Mode=TwoWay}"/>
            </DataTemplate>
        </Setter.Value>
    </Setter>
</Style>

我的派生似乎:

<Style x:Key="DerivedTabItem"
     BasedOn="{StaticResource EditableTabItemStyle}"
     TargetType="TabItem">
<Setter Property="Foreground">
  <Setter.Value>
    <MultiBinding Converter="{StaticResource StateToColorConverter}">
      <Binding Path="States.State1" />
      <Binding Path="States.State2" />
    </MultiBinding>
  </Setter.Value>
</Setter>

我希望在派生样式中添加多边形,最好不要改变基本样式,所以我最初的想法是添加标题模板:

<Setter Property="HeaderTemplate">
  <Setter.Value>
      <!-- Old header template -->
      <!-- Polygon -->
  </Setter.Value>
</Setter>

但是这会覆盖可编辑的样式。我不确定我想要的是否可能,所以如果需要,我会把它作为答案,但如果可以做到,我该怎么做呢?

1 个答案:

答案 0 :(得分:0)

您无法修改现有模板。你可以:

  • 复制并添加您喜欢的任何内容。
  • 修改原始模板以包含仅在特定条件下显示的另一个控件(例如,使用DataTrigger或绑定到其Visibility属性)。
    • 此控件可能非常灵活,例如ContentPresenter可以通过将其绑定到某个占位符属性来显示各种内容。

在这种情况下,模板如此简单,我会选择前者。