【问题标题】:How to stop DataGrid row color from changing?如何阻止 DataGrid 行颜色发生变化?
【发布时间】:2016-08-17 18:56:43
【问题描述】:

我已经实现了在 WPF DataGrid 中选择一行时解决双击问题的代码。我在这里使用以下代码:https://stackoverflow.com/a/5857908/40106

<Style TargetType="DataGridCell">
     <Style.Triggers>
         <Trigger Property="IsMouseOver" Value="True">
             <Setter Property="IsEditing" Value="True" />
         </Trigger>
     </Style.Triggers>
 </Style>

行有交替的颜色。问题是当我将鼠标悬停在一行中时,在一列中,浅蓝色被白色取代。

除了这个问题,上面的代码效果很好。将鼠标悬停在一行上时如何阻止颜色变化?

我尝试了以下方法,但没有任何效果:

<Style TargetType="DataGridCell">
     <Style.Triggers>
         <Trigger Property="IsMouseOver" Value="True">
             <Setter Property="IsEditing" Value="True" />
             <Setter Property="Background" Value"AliceBlue" />
         </Trigger>
     </Style.Triggers>
 </Style>

【问题讨论】:

    标签: c# .net wpf datagrid wpfdatagrid


    【解决方案1】:

    问题是,当您将鼠标悬停在单元格上方时,单元格将显示其编辑样式。

    对于DataGridTextColumn,这意味着显示带有白色背景的TextBox

    您可以将样式设置为&lt;DataGridTextColumn.EditingElementStyle&gt;,并将背景设置为transparent

    <DataGridTextColumn Header="Name" Binding="{Binding Name}" >
        <DataGridTextColumn.EditingElementStyle>
            <Style TargetType="TextBox">
                <Setter Property="Background" Value="Transparent"></Setter>
                <Setter Property="BorderThickness" Value="0"></Setter>
            </Style>
        </DataGridTextColumn.EditingElementStyle>
    </DataGridTextColumn>
    

    要获得白色背景,在实际编辑单元格时,您可以向 IsSelected 事件添加另一个触发器:

    <Style TargetType="DataGridCell">
        <Style.Triggers>
            <Trigger Property="IsMouseOver" Value="True">
                <Setter Property="IsEditing" Value="True" />
            </Trigger>
    
            <Trigger Property="IsSelected" Value="True">
                <Setter Property="Background" Value="White"/>
            </Trigger>
    
        </Style.Triggers>
    </Style>
    

    另一种选择是将 DataGridCell 样式仅应用于 CheckBoxColumns。对于其他 Column 类型,无论如何它都不会产生影响。

    【讨论】:

    • 我尝试了第一个代码,它可以工作,除了当您将鼠标悬停在它们上面时单元格会被压下。某种类型的动画。有没有办法消除它?此外,对于复选框,当悬停在彩色行上时,复选框会更改为行颜色(不是实际的单元格)。有没有办法让复选框保持白色?
    • 还应该为 TextBox 样式设置 &lt;Setter Property="BorderThickness" Value="0"&gt;&lt;/Setter&gt; 以防止高度发生变化。
    • 对于复选框,它看起来像它们的默认鼠标悬停行为。
    • 好多了。将鼠标悬停在 TextBox 上时,文本仍会略微移动。有没有办法消除这种行为?
    • 在我的例子中看起来不错。但是将 Margin 设置为 0 可能会有所帮助。可能有一些 Margin/Padding/Border 会导致这种效果。
    猜你喜欢
    • 2014-10-08
    • 2017-04-04
    • 1970-01-01
    • 2015-10-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-17
    相关资源
    最近更新 更多