WPF - TabItem 选择或悬停在 TabItem 上时,背景颜色会发生变化

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/3265140/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-09-08 21:56:04  来源:igfitidea点击:

WPF - TabItem Background color changes when tabitem selected or hover over

wpfwpf-controlsstylestabcontroltabitem

提问by TCoder

I set the Background color of the tabitem in the xaml to RED, but when i run it and hover over it or select it it changes back the the default greyish looking. It only shows correctly when the other tabitem is selected. How do i keep it RED all the time. Thanks!

我将 xaml 中 tabitem 的背景颜色设置为红色,但是当我运行它并将鼠标悬停在它上面或选择它时,它会变回默认的灰色外观。它仅在选择其他 tabitem 时正确显示。我如何一直保持红色。谢谢!

回答by Eugene Cheverda

Here is example of TabItem ControlTemplate

这是 TabItem ControlTemplate 的示例

Copy it to your resources and set wherever you need Red color as Background.

将其复制到您的资源中,并在需要的任何地方设置红色作为背景。

SAMPLE

样本

<Window x:Class="TestCustomTab.Window1"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Title="Window1" Height="300" Width="300">
    <Window.Resources>
        <SolidColorBrush x:Key="RedBrush" Color="Red"/>       

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

        <SolidColorBrush x:Key="GreenBrush" Color="Green" />

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

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

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

        <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 RedBrush}"
                                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 GreenBrush}" />
                                <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>        
    </Window.Resources>
    <Grid>
        <TabControl>
            <TabItem Header="MyTabItem" />
            <TabItem Header="MyTabItem"  />
        </TabControl>
    </Grid>
</Window>

Create test WPF project and paste sample code instead of Window1.xaml code.

创建测试 WPF 项目并粘贴示例代码而不是 Window1.xaml 代码。