TabItem.IsSelected的触发器不起作用

sta*_*war 5 wpf styles selecteditem

我想将选项卡背景设置为红色并取消选择为绿色.但是,更改时,只有未选中的选项卡显示为绿色.精选仍为白色.

        <TabControl Background="LightGray" Name="MainTabControl">
        <TabControl.Resources>
            <Style TargetType="TabItem">
                <Style.Triggers>
                    <Trigger Property="IsSelected" Value="True">
                        <Setter Property="Background" Value="Red" />
                    </Trigger>
                    <Trigger Property="IsSelected" Value="False">
                        <Setter Property="Background" Value="Green" />
                    </Trigger>
                </Style.Triggers>
            </Style>
        </TabControl.Resources>
        <TabItem Header="Main" />
        <TabItem Header="Optimizer" />
    </TabControl>
Run Code Online (Sandbox Code Playgroud)

输入ifdsfdsre

Sam*_*Dev 5

覆盖TabItem's ControlTemplate并为其添加触发器

<Style TargetType="{x:Type TabItem}">
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="{x:Type TabItem}">
                    <Grid>
                        <Border Name="Border"  >
                            <ContentPresenter  VerticalAlignment="Center" Margin="5"
                          HorizontalAlignment="Center"
                          ContentSource="Header" >                                   
                            </ContentPresenter>
                        </Border>
                    </Grid>
                    <ControlTemplate.Triggers>
                        <Trigger Property="IsSelected" Value="True">                                
                            <Setter TargetName="Border" Property="Background" Value="Red" />                                
                        </Trigger>
                        <Trigger Property="IsSelected" Value="False">
                            <Setter TargetName="Border" Property="Background" Value="Green" />                                                                
                        </Trigger>
                    </ControlTemplate.Triggers>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>
Run Code Online (Sandbox Code Playgroud)

编辑

保持原始tabitem样式并添加背景颜色,从设计师右键单击tabitem并选择EditTemplate>编辑副本,然后更新TabItem.Static.Background负责非选定选项卡颜色的Gardian 画笔,以及负责选中选项卡的TabItem.Selected.BackgroundBrush颜色:

  //..
  <LinearGradientBrush x:Key="TabItem.Static.Background" EndPoint="0,1" StartPoint="0,0">
        <GradientStop Color="#F0F0F0" Offset="0.0"/>
        <GradientStop Color="Green" Offset="1.0"/>
    </LinearGradientBrush>
    <SolidColorBrush x:Key="TabItem.Static.Border" Color="#ACACAC"/>
    <LinearGradientBrush x:Key="TabItem.MouseOver.Background" EndPoint="0,1" StartPoint="0,0">
        <GradientStop Color="#ECF4FC" Offset="0.0"/>
        <GradientStop Color="#DCECFC" Offset="1.0"/>
    </LinearGradientBrush>
    <SolidColorBrush x:Key="TabItem.MouseOver.Border" Color="#7EB4EA"/>
    <SolidColorBrush x:Key="TabItem.Disabled.Background" Color="#F0F0F0"/>
    <SolidColorBrush x:Key="TabItem.Disabled.Border" Color="#D9D9D9"/>
    <SolidColorBrush x:Key="TabItem.Selected.Border" Color="#ACACAC"/>
    <SolidColorBrush x:Key="TabItem.Selected.Background" Color="Red"/>
    //..
Run Code Online (Sandbox Code Playgroud)

要么

或者您可以使用templateBinding在两个mainBorderinnerBorderBackground财产(最初仅mainBordertemplateBindedbackground属性),然后添加到触发的controlTemplate触发,

<Grid x:Name="templateRoot" SnapsToDevicePixels="true">
                        <Border x:Name="mainBorder" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="1,1,1,0" Background="{TemplateBinding Background}" Margin="0">
                            <Border x:Name="innerBorder" BorderBrush="{StaticResource TabItem.Selected.Border}" BorderThickness="1,1,1,0"  Background="{TemplateBinding Background}" Margin="-1" Opacity="0"/>
                        </Border>
                        <ContentPresenter x:Name="contentPresenter" ContentSource="Header" Focusable="False" HorizontalAlignment="{Binding HorizontalContentAlignment, RelativeSource={RelativeSource AncestorType={x:Type ItemsControl}}}" Margin="{TemplateBinding Padding}" RecognizesAccessKey="True" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" VerticalAlignment="{Binding VerticalContentAlignment, RelativeSource={RelativeSource AncestorType={x:Type ItemsControl}}}"/>
                    </Grid>
Run Code Online (Sandbox Code Playgroud)

并在最后添加您的触发器

              <Trigger Property="IsSelected" Value="True">
                                <Setter Property="Background" Value="Red" />
                            </Trigger>
                            <Trigger Property="IsSelected" Value="False">
                                <Setter Property="Background" Value="Green" />
                            </Trigger>

                    </ControlTemplate.Triggers>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
Run Code Online (Sandbox Code Playgroud)

这应该回应你的第二个问题