【问题标题】:Why does my IsMouseOver event only work if my CheckBox is true?为什么我的 IsMouseOver 事件只有在我的 CheckBox 为真时才起作用?
【发布时间】:2021-05-08 20:10:18
【问题描述】:

我有一个 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,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,0,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,2,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,0,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>

【问题讨论】:

    标签: wpf xaml data-binding datagrid wpf-controls


    【解决方案1】:

    更改触发器的顺序。他们都设置了背景。目前,当未选中 CheckBox 时,IsChecked=false 的 DataTrigger 会覆盖 IsMouseOver=true 的 Trigger,因为最后应用了 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>
    

    【讨论】:

    • 感谢它现在的工作:D
    猜你喜欢
    • 2019-03-14
    • 1970-01-01
    • 2021-03-29
    • 2011-09-29
    • 2016-04-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-08
    相关资源
    最近更新 更多