如何阻止DataGrid行颜色更改?

时间:2016-08-17 18:56:44

标签: c# .net wpf datagrid wpfdatagrid

我在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>

1 个答案:

答案 0 :(得分:1)

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

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

您可以将样式设置为<DataGridTextColumn.EditingElementStyle>,并将背景设置为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。对于其他列类型,它无论如何都不会产生任何影响。