如何从 TabItem 的 HeaderTemplate 触发 'IsSelected'?

How can I trigger on 'IsSelected' from a TabItem's HeaderTemplate?

我为我的 WPF 应用程序创建了自定义样式 TabControl。这包括 TabItem 的以下 Style

<Style x:Key="TabItemStyle1" TargetType="{x:Type TabItem}">
    <Setter Property="Padding" Value="12,2"/>
    <Setter Property="HorizontalContentAlignment" Value="Stretch"/>
    <Setter Property="VerticalContentAlignment" Value="Stretch"/>
    <Setter Property="Foreground" Value="White" />
    <Setter Property="FontSize" Value="14" />
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="{x:Type TabItem}">
                <ContentPresenter ContentTemplate="{TemplateBinding HeaderTemplate}" Content="{TemplateBinding Header}" ContentStringFormat="{TemplateBinding HeaderStringFormat}" ContentSource="Header" HorizontalAlignment="{Binding HorizontalContentAlignment, RelativeSource={RelativeSource FindAncestor, AncestorLevel=1, AncestorType={x:Type ItemsControl}}}" Margin="{TemplateBinding Padding}" RecognizesAccessKey="True" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" VerticalAlignment="{Binding VerticalContentAlignment, RelativeSource={RelativeSource FindAncestor, AncestorLevel=1, AncestorType={x:Type ItemsControl}}}"/>
                <ControlTemplate.Triggers>
                    <Trigger Property="IsSelected" Value="True">
                        <Setter Property="Panel.ZIndex" Value="1" />
                        <Setter Property="Foreground" Value="Orange" />
                    </Trigger>
                </ControlTemplate.Triggers>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>

基本上,我希望 header 文本大小为 14 并且颜色为白色,除非选择了 TabItem(那么它应该是 o运行ge):

当我看到 TabItem 的 child 控件(上面的屏幕中没有显示)继承了 FontSizeForeground。在 SO 快速搜索后,我来到这个线程 (SO: How do I set TabControls TabItem header FontSize) 并决定使用 HeaderTemplate,正如回答者 'Novitchi S' 推荐的那样。这是我的结果:

<Style x:Key="TabItemStyle1" TargetType="{x:Type TabItem}">
    <Setter Property="Padding" Value="12,2"/>
    <Setter Property="HorizontalContentAlignment" Value="Stretch"/>
    <Setter Property="VerticalContentAlignment" Value="Stretch"/>
    <Setter Property="HeaderTemplate">
        <Setter.Value>
            <DataTemplate DataType="{x:Type TabItem}">
                <ContentPresenter>
                    <ContentPresenter.Content>
                        <TextBlock x:Name="ContentTextBlock" Foreground="White" FontSize="14" Text="{TemplateBinding Content}"/>
                    </ContentPresenter.Content>
                </ContentPresenter>
                <DataTemplate.Triggers>
                    <DataTrigger Binding="{Binding RelativeSource={RelativeSource Mode=TemplatedParent}, Path=IsSelected}">
                        <Setter TargetName="ContentTextBlock" Property="Foreground" Value="Orange" />
                    </DataTrigger>
                </DataTemplate.Triggers>
            </DataTemplate>
        </Setter.Value>
    </Setter>
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="{x:Type TabItem}">
                <ContentPresenter ContentTemplate="{TemplateBinding HeaderTemplate}" Content="{TemplateBinding Header}" ContentStringFormat="{TemplateBinding HeaderStringFormat}" ContentSource="Header" HorizontalAlignment="{Binding HorizontalContentAlignment, RelativeSource={RelativeSource FindAncestor, AncestorLevel=1, AncestorType={x:Type ItemsControl}}}" Margin="{TemplateBinding Padding}" RecognizesAccessKey="True" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" VerticalAlignment="{Binding VerticalContentAlignment, RelativeSource={RelativeSource FindAncestor, AncestorLevel=1, AncestorType={x:Type ItemsControl}}}"/>
                <ControlTemplate.Triggers>
                    <Trigger Property="IsSelected" Value="True">
                        <Setter Property="Panel.ZIndex" Value="1" />
                    </Trigger>
                </ControlTemplate.Triggers>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>

从积极的方面来说,FontSizeForeground 现在工作正常。我唯一无法开始工作的是在选择选项卡时为 TextBlock o运行ge 着色。我的直觉是 DataTrigger 找不到 TemplatedParentTextBlock,但我卡住了。

我有哪些选择可以实现我的目标?

好的,问题 #1

绑定模式不正确,不要使用Mode=TemplatedParent,使用

{ Binding Path=propertyOfTargetElement, 
  RelativeSource={RelativeSource Mode=FindAncestor, 
                  AncestorType={x:Type typeOfTargetElement}
                 }
}

**

**
至于 #2 问题,我会将触发器移到文本块中。请注意,我在该数据模板中看不到 contentpresenter 的用途,因此将其删除,除非它存在是有原因的)。

然后我会

 <TextBlock>
     <TextBlock.Style>
          <Style.Triggers>
                <DataTrigger