2016-08-17 41 views
0

我实现了代码选择在WPF数据网格中的一行时避开双击问题。我从这里使用下面的代码:https://stackoverflow.com/a/5857908/40106如何阻止DataGrid行颜色变化?

<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

的问题是,该小区将显示它的编辑风格,当你将鼠标悬停在单元格上方的鼠标。

对于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只。对于其他列类型,它无论如何都不会有所作为。

+0

我尝试的第一个代码和它的作品除了当你将鼠标悬停在他们的细胞抑制。某种类型的动画。有没有办法消除这种情况?此外,对于复选框,当鼠标悬停在有色行时,复选框改变该行的颜色(而不是实际的细胞)。有没有办法让复选框保持白色? – 4thSpace

+0

还应该为TextBox样式设置''以防止高度发生变化。 – jHilscher

+0

对于复选框看起来像它们的默认鼠标悬停行为。 – jHilscher