为什么我的 IsMouseOver 事件仅在我的 CheckBox 为真时才起作用?

问题描述

我有一个 DataGrid,当我的 CheckBox 被激活时,我可以在其中更改相应的颜色。但是,我的 IsMouSEOver 事件仅在我的 CheckBox 为真时才有效。一旦我的 CheckBox 设置为 false,我的 IsMouSEOver 效果就不再起作用,为什么?我必须在某处设置触发器吗?

来自我的 DataGrid 的代码

<DataGrid x:Name="datagrid" ItemsSource="{Binding}" 
                  CanUserAddRows="False" CanUserDeleteRows="False" 
                  CanUserResizeRows="True" GridLinesVisibility="None"
                  ColumnWidth="*" DockPanel.Dock="Bottom" 
                  Background="#222831" Foreground="White" 
                  AutoGenerateColumns="True">
            
    <DataGrid.ContextMenu>
        <ContextMenu>
            <MenuItem Command="copy"/>
        </ContextMenu>
    </DataGrid.ContextMenu>


    <DataGrid.Resources>
        <!--Design kopfzeile-->
        <Style targettype="{x:Type DataGridColumnHeader}" x:Name="test" >
            <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,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="insideHeader" Background="#242A36">
                            <Border x:Name="borderHeader" BorderThickness="1"
                                CornerRadius="6"
                                Background="#2D2D30"
                                Padding="10,0"
                                Margin="2">
                                <ContentPresenter/>
                            </Border>
                        </Border>
                        <ControlTemplate.Triggers>
                            <Trigger Property="IsMouSEOver" Value="True">
                                <Setter TargetName="borderHeader" Property="Background" Value="#4182C6"/>
                            </Trigger>
                            <DataTrigger  Binding="{Binding ElementName=toogleButton,Path=IsChecked}" Value="False">
                                <Setter TargetName="borderHeader" Property="Background" Value="#FA9F34"/>
                                <Setter Property="Foreground" Value="#2B2B2B"/>
                                <Setter TargetName="insideHeader" Property="Background" Value="#00336E"/>
                            </DataTrigger>
                            
                        </ControlTemplate.Triggers>
                    </ControlTemplate>
                </Setter.Value>
            </Setter>
        </Style>
                           
        <!--Deaktivieren Des rowheader-->
        <Style targettype="{x:Type DataGridRowHeader}">
            <Setter Property="Background" Value="Transparent"/>
        </Style>

        <!--Cellen Design-->
        <Style targettype="{x:Type DataGridCell}">
            <Setter Property="Background" Value="#292F3B"/>
            <Setter Property="Foreground" Value="LightBlue"/>
            <Setter Property="BorderThickness" Value="0,0" />
            <Setter Property="BorderBrush" Value="#333333"/>
            <Setter Property="Template">
                <Setter.Value>
                    <ControlTemplate targettype="{x:Type DataGridCell}">
                        <Border x:Name="insideBorder" Background="#242A36">
                            <Border x:Name="BorderCell" BorderThickness="1"
                                CornerRadius="6"
                                Background="#292F3B"
                                Padding="10,0"
                                Margin="2">
                                <ContentPresenter/>
                            </Border>
                        </Border>
                        <ControlTemplate.Triggers>
                            <Trigger Property="IsMouSEOver" Value="True">
                                <Setter TargetName="BorderCell" Property="Background" Value="#4182C6"/>
                            </Trigger>
                            <DataTrigger  Binding="{Binding ElementName=toogleButton,Path=IsChecked}" Value="False">
                                <Setter TargetName="BorderCell" Property="Background" Value="#0051B0"/>
                                <Setter TargetName="insideBorder" Property="Background" Value="#00336E"/>

                            </DataTrigger>
                        </ControlTemplate.Triggers>
                    </ControlTemplate>
                </Setter.Value>
            </Setter>


        </Style>
    </DataGrid.Resources>

</DataGrid>

解决方法

更改触发器的顺序。他们都设置了背景。此时 DataTrigger for IsChecked=false 覆盖 Trigger for IsMouseOver=true,当 CheckBox 未选中时,因为 DataTrigger 是最后应用的。

<DataTrigger Binding="{Binding ElementName=toogleButton,Path=IsChecked}" Value="False">
    <Setter TargetName="borderHeader" Property="Background" Value="#FA9F34"/>
    <Setter Property="Foreground" Value="#2B2B2B"/>
    <Setter TargetName="insideHeader" Property="Background" Value="#00336E"/>
</DataTrigger>
<Trigger Property="IsMouseOver" Value="True">
    <Setter TargetName="borderHeader" Property="Background" Value="#4182C6"/>
</Trigger>

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...