为什么我的 Style.trigger 事件不适用于我的 WPF Datagrid?

Why is my Style.trigger event not working for my WPF Datagrid?

我在 WPF 中有一个 DataGrid,并在设置器中为它创建了一个 ControlTemplate。在创建此 ControlTemplate 之前,我的 Style.trigger 完美地处理了 IsMouseOver 事件。但是在放置 Controltemplate 之后它不再工作了。这是我的代码:

<Style TargetType="{x:Type DataGridColumnHeader}">
                    <Setter Property="Background" Value="#292F3B"/>
                    <Setter Property="Foreground" Value="LightBlue"/>
                    <Setter Property="FontWeight" Value="SemiBold"/>
                    <Setter Property="Height" Value="30"/>
                    <Setter Property="FontSize" Value="15"/>
                    <Setter Property="BorderThickness" Value="0,0,2,0" />
                    <Setter Property="BorderBrush" Value="#333333"/>
                    <Setter Property="Padding" Value="10 0 0 0"/>
                    <Setter Property="Template">
                        <Setter.Value>
                            <ControlTemplate TargetType="{x:Type DataGridColumnHeader}">
                                <Border Background="#242A36">
                                    <Border BorderThickness="1"
                                        CornerRadius="6"
                                        Background="#2D2D30"
                                        Padding="10,0,0,0"
                                        Margin="2">
                                        <ContentPresenter/>
                                    </Border>
                                </Border>
                            </ControlTemplate>
                        </Setter.Value>
                    </Setter>
                    <Style.Triggers>
                        <Trigger Property="IsMouseOver" Value="True">
                            <Setter Property="Background" Value="Red"/>
                        </Trigger>
                    </Style.Triggers>


                </Style>

所以我只希望 IsMouseOver 效果与 ControlTemplate 一起工作。

现在将您的 <Style.Triggers> 作为 <ControlTemplate.Triggers> 移动到 ControlTemplate 中,您应该会看到它再次更改背景。但是您必须使用 Target 属性来识别背景的目标,因为 WPF 不够智能,无法知道您在谈论哪个背景。

举个例子:

<Window.Resources>
    <Style x:Key="mystyle" TargetType="{x:Type DataGridColumnHeader}">
        <Setter Property="Background" Value="#292F3B"/>
        <Setter Property="Foreground" Value="LightBlue"/>
        <Setter Property="FontWeight" Value="SemiBold"/>
        <Setter Property="Height" Value="30"/>
        <Setter Property="FontSize" Value="15"/>
        <Setter Property="BorderThickness" Value="0,0,2,0" />
        <Setter Property="BorderBrush" Value="#333333"/>
        <Setter Property="Padding" Value="10 0 0 0"/>
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="{x:Type DataGridColumnHeader}">
                    <Border x:Name="border" Background="#242A36">
                        <Border BorderThickness="1"
                                    CornerRadius="6"
                                    Background="#2D2D30"
                                    Padding="10,0,0,0"
                                    Margin="2">
                            <ContentPresenter/>
                        </Border>
                    </Border>
                    <ControlTemplate.Triggers>
                        <Trigger Property="IsMouseOver" Value="True">
                            <Setter TargetName="border" Property="Background" Value="Red"/>
                        </Trigger>
                    </ControlTemplate.Triggers>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>
</Window.Resources>
<Grid>
    <DataGrid CanUserAddRows="True" ItemsSource="{Binding Stuff}">
        <DataGrid.Columns>
            <DataGridTextColumn HeaderStyle="{StaticResource mystyle}" Header="Name"/>
        </DataGrid.Columns>
    </DataGrid>
</Grid>

这是将鼠标悬停在 header 上时的样子。

注意:我不知道你到底想改变什么颜色,所以我只选择了你定义的外边框