Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/298.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/opengl/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何扩展DataTemplate以包含附加控件_C#_Wpf_Datatemplate_Tabcontrol - Fatal编程技术网

C# 如何扩展DataTemplate以包含附加控件

C# 如何扩展DataTemplate以包含附加控件,c#,wpf,datatemplate,tabcontrol,C#,Wpf,Datatemplate,Tabcontrol,所以我有一个样式,它对wpf选项卡控件做了一些奇特的事情,其中设置了一个HeaderTemplate,允许用户重命名选项卡。我有一个基于此模板的样式,它根据一些参数为文本着色,我想根据一些条件在每个选项卡的标题中添加一个多边形 因此,基本样式如下所示: <Style TargetType="TabItem" x:Key="EditableTabItemStyle" BasedOn="{StaticResource BaseTabItemStyle}"> <

所以我有一个样式,它对wpf选项卡控件做了一些奇特的事情,其中设置了一个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>

我的衍生产品看起来像:

<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>


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

你不能修改现有的模板。您可以:

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

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

该死,我一直希望避免这种情况。我会等几天,看看是否有人有一个聪明的工作,如果没有,答案是你的。