Wpf 如何在xaml中使用触发器更改tabitem的背景?

Wpf 如何在xaml中使用触发器更改tabitem的背景?,wpf,Wpf,这是我的Xaml代码 <Window.Resources> <Style x:Key="SimpleTabControl" TargetType="{x:Type TabItem}"> <!--<Setter Property = "TabStripPlacement" Value = "Top"/>--> <Setter Property = "Background" Valu

这是我的Xaml代码

<Window.Resources>
        <Style x:Key="SimpleTabControl" TargetType="{x:Type TabItem}">
            <!--<Setter Property = "TabStripPlacement" Value = "Top"/>-->
            <Setter Property = "Background" Value= "Gray"/>
            <Setter Property="FontSize" Value="15"/>
            <Setter Property="Width" Value="200"/>
            <Setter Property="Height" Value="40"/>
            <Setter Property="HorizontalAlignment" Value="Left"/>
            <Setter Property="IsSelected" Value="False"/>
            <Setter Property="Margin" Value="3,0"/>
            <Style.Triggers>
                <Trigger Property="TabItem.IsMouseOver" Value="true">
                    <Setter Property="Background" Value="LightGreen"></Setter>
                </Trigger>
            </Style.Triggers>

        </Style>


                <EventTrigger RoutedEvent="MouseEnter">
                    <EventTrigger.Actions>

                    </EventTrigger.Actions>
                </EventTrigger>
            </Style.Triggers>
        </Style>
        <Style TargetType="{x:Type TabPanel}">
            <Setter Property="Background" Value="LightGreen"></Setter>
        </Style>

    </Window.Resources>
    <Grid Background="White" Height="1000"  Width="auto" IsEnabled="True">
        <TabControl Name="MainTab" Background="LightGray" SelectionChanged="MainTab_SelectionChanged">
            <TabControl.Resources>
                <Style TargetType="{x:Type TabPanel}">
                    <Setter Property="HorizontalAlignment" Value="Left" />
                    <Setter Property="Background" Value="White"/>
                </Style>
            </TabControl.Resources>

            <TabItem Header="Input" x:Name="tabAlert1" Style="{StaticResource SimpleTabControl}" MouseEnter="TabItem_Enter" MouseLeave="TabItem_Leave" MouseDoubleClick="TabItem_Click" >

                <!--<TabItem.Header>
                    <Border Padding="0,0">
                        <StackPanel Orientation="Horizontal"  Background="Gray" HorizontalAlignment="Left" Width="200" Height="40" Margin="0,0">
                            <TextBlock Text="Input" Foreground="White" FontSize="15" TextAlignment="Right"/>
                        </StackPanel>
                    </Border>

                </TabItem.Header>-->
                <Label Content="Content goes here..." />
            </TabItem>
            <TabItem Header="Analysis" x:Name="tabAlert2"  Style="{StaticResource SimpleTabControl}" />
            <TabItem Header="Action???" x:Name="tabAlert3" Style="{StaticResource SimpleTabControl}"/>
        </TabControl>
</Grid>

我已将鼠标进入事件绑定到选项卡项。这是非常基本的,但我对此不起作用感到沮丧?非常感谢任何帮助

我不确定,但我想您想更改标题的颜色吗

如果是这样,您可以更改标题模板,尝试此代码,如果它适合您,请添加其他属性

<Window.Resources>     
    <Style TargetType="TabItem">
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="TabItem">
                    <Grid Name="Panel">
                        <Border Name="Border" BorderThickness="1,1,1,0" BorderBrush="Gainsboro" CornerRadius="4,4,0,0" Margin="2,0">
                            <ContentPresenter x:Name="ContentSite" 
                                    VerticalAlignment="Center" 
                                    HorizontalAlignment="Center" 
                                    ContentSource="Header" 
                                    Margin="10,2"/>
                        </Border>

                    </Grid>
                    <ControlTemplate.Triggers>
                        <Trigger Property="IsMouseOver" Value="True">
                            <Setter TargetName="Border" Property="Background" Value="LightGreen"/>
                        </Trigger>
                        <Trigger Property="IsMouseOver" Value="False">
                            <Setter TargetName="Border" Property="Background" Value="White" />
                        </Trigger>
                        <Trigger Property="IsSelected" Value="True">
                            <Setter TargetName="Border" Property="Background" Value="LightBlue"/>
                        </Trigger>
                    </ControlTemplate.Triggers>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>

</Window.Resources>

<Grid>
    <TabControl Name="MainTab">
        <TabItem Header="Input" x:Name="tabAlert1"/>
        <TabItem Header="Analysis" x:Name="tabAlert2"/>
        <TabItem Header="Action???" x:Name="tabAlert3"/>
    </TabControl>

</Grid>

(鼠标位于第二个选项卡上)

Hi ATM,上面的方法很好,但是你能解释一下我的方法和sherdan的方法有什么问题吗,你使用了控制模板和边界元素,有什么具体原因吗??请详细说明?这个MSDN说:“Windows演示基金会(WPF)中的控件拥有包含该控件的可视树的ControlTemplate。您可以通过修改该控件的ControlTemplate来更改控件的结构和外观。无法仅替换控件的可视树的一部分;若要更改控件的可视树,必须将控件的Template属性设置为新的nd完整的控制模板。“关于边界,我从这个
<Window.Resources>     
    <Style TargetType="TabItem">
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="TabItem">
                    <Grid Name="Panel">
                        <Border Name="Border" BorderThickness="1,1,1,0" BorderBrush="Gainsboro" CornerRadius="4,4,0,0" Margin="2,0">
                            <ContentPresenter x:Name="ContentSite" 
                                    VerticalAlignment="Center" 
                                    HorizontalAlignment="Center" 
                                    ContentSource="Header" 
                                    Margin="10,2"/>
                        </Border>

                    </Grid>
                    <ControlTemplate.Triggers>
                        <Trigger Property="IsMouseOver" Value="True">
                            <Setter TargetName="Border" Property="Background" Value="LightGreen"/>
                        </Trigger>
                        <Trigger Property="IsMouseOver" Value="False">
                            <Setter TargetName="Border" Property="Background" Value="White" />
                        </Trigger>
                        <Trigger Property="IsSelected" Value="True">
                            <Setter TargetName="Border" Property="Background" Value="LightBlue"/>
                        </Trigger>
                    </ControlTemplate.Triggers>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>

</Window.Resources>

<Grid>
    <TabControl Name="MainTab">
        <TabItem Header="Input" x:Name="tabAlert1"/>
        <TabItem Header="Analysis" x:Name="tabAlert2"/>
        <TabItem Header="Action???" x:Name="tabAlert3"/>
    </TabControl>

</Grid>