如何扩展 DataTemplate 以包含附加控件
How To Extend A DataTemplate to Include an Additional Control
所以我有一个样式,它对 wpf TabControl 做了一些奇特的事情,其中设置了一个允许用户重命名选项卡的 HeaderTemplate。我有一个基于此模板的样式,它根据某些参数为文本着色,我想根据某些条件向每个选项卡的 header 添加一个多边形。
所以基本样式如下:
<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>
我想在派生样式中添加一个多边形,最好完全不更改基本样式,所以我最初的想法是添加一个 header 模板:
<Setter Property="HeaderTemplate">
<Setter.Value>
<!-- Old header template -->
<!-- Polygon -->
</Setter.Value>
</Setter>
但这会覆盖可编辑的样式。我不确定我想要的是否可能,所以如果需要我会把它作为答案,但如果可以做到,我该怎么做?
您无法修改现有模板。您可以:
- 复制它并添加任何你喜欢的东西。
- 修改原始模板以包含仅在特定条件下显示的另一个控件(例如使用
DataTrigger
或绑定到其 Visibility
属性)。
- 此控件可以是非常灵活的控件,例如
ContentPresenter
可以通过将其绑定到某个占位符 属性. 来显示各种内容
在这种情况下,模板是如此简单,我会选择前者。
所以我有一个样式,它对 wpf TabControl 做了一些奇特的事情,其中设置了一个允许用户重命名选项卡的 HeaderTemplate。我有一个基于此模板的样式,它根据某些参数为文本着色,我想根据某些条件向每个选项卡的 header 添加一个多边形。
所以基本样式如下:
<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>
我想在派生样式中添加一个多边形,最好完全不更改基本样式,所以我最初的想法是添加一个 header 模板:
<Setter Property="HeaderTemplate">
<Setter.Value>
<!-- Old header template -->
<!-- Polygon -->
</Setter.Value>
</Setter>
但这会覆盖可编辑的样式。我不确定我想要的是否可能,所以如果需要我会把它作为答案,但如果可以做到,我该怎么做?
您无法修改现有模板。您可以:
- 复制它并添加任何你喜欢的东西。
- 修改原始模板以包含仅在特定条件下显示的另一个控件(例如使用
DataTrigger
或绑定到其Visibility
属性)。- 此控件可以是非常灵活的控件,例如
ContentPresenter
可以通过将其绑定到某个占位符 属性. 来显示各种内容
- 此控件可以是非常灵活的控件,例如
在这种情况下,模板是如此简单,我会选择前者。