如何避免 tabItem 失去颜色

How to avoid that a tabItem loses colour

我有一个 WPF 程序,在左侧设置了 tabItems 接口。

我要的是tabItem保持colour如下图:

请注意鼠标指针在哪里。当 tabItemcoloured.

当进入右侧界面的另一部分时,tabItem 失去颜色并得到浮雕:

我不确定发布我的 xaml 文件是否有帮助。 基本上我注意到,当箭头在右边的 datagrid 上时,tabItem 是彩色的,而在自由 space 上则不是。

请注意,我不希望 tabItem 具有特定的颜色,它必须遵循系统调色板,因此具有正确的系统颜色。

感谢您的帮助。

这是来自 Microsoft 的 Article,描述了如何使用 ColorTemplateTriggers 来解决您的问题。

这是文章中的示例,以防将来 link 由于某种原因停机:

<Style TargetType="{x:Type TabItem}">
  <Setter Property="Template">
    <Setter.Value>
      <ControlTemplate TargetType="{x:Type TabItem}">
        <Grid>
          <Border 
            Name="Border"
            Margin="0,0,-4,0" 
            Background="{StaticResource LightBrush}"
            BorderBrush="{StaticResource SolidBorderBrush}" 
            BorderThickness="1,1,1,1" 
            CornerRadius="2,12,0,0" >
            <ContentPresenter x:Name="ContentSite"
              VerticalAlignment="Center"
              HorizontalAlignment="Center"
              ContentSource="Header"
              Margin="12,2,12,2"
              RecognizesAccessKey="True"/>
          </Border>
        </Grid>
        <ControlTemplate.Triggers>
          <Trigger Property="IsSelected" Value="True">
            <Setter Property="Panel.ZIndex" Value="100" />
            <Setter TargetName="Border" Property="Background" Value="{StaticResource WindowBackgroundBrush}" />
            <Setter TargetName="Border" Property="BorderThickness" Value="1,1,1,0" />
          </Trigger>
          <Trigger Property="IsEnabled" Value="False">
            <Setter TargetName="Border" Property="Background" Value="{StaticResource DisabledBackgroundBrush}" />
            <Setter TargetName="Border" Property="BorderBrush" Value="{StaticResource DisabledBorderBrush}" />
            <Setter Property="Foreground" Value="{StaticResource DisabledForegroundBrush}" />
          </Trigger>
        </ControlTemplate.Triggers>
      </ControlTemplate>
    </Setter.Value>
  </Setter>
</Style>

资源:

<LinearGradientBrush x:Key="LightBrush" StartPoint="0,0" EndPoint="0,1">
  <GradientBrush.GradientStops>
    <GradientStopCollection>
      <GradientStop Color="#FFF" Offset="0.0"/>
      <GradientStop Color="#EEE" Offset="1.0"/>
    </GradientStopCollection>
  </GradientBrush.GradientStops>
</LinearGradientBrush>

  ...

<SolidColorBrush x:Key="SolidBorderBrush" Color="#888" />

  ...

<SolidColorBrush x:Key="WindowBackgroundBrush" Color="#FFF" />

  ...

<SolidColorBrush x:Key="DisabledBackgroundBrush" Color="#EEE" />

  ...

<SolidColorBrush x:Key="DisabledBorderBrush" Color="#AAA" />

  ...

<SolidColorBrush x:Key="DisabledForegroundBrush" Color="#888" />