2016-08-17 86 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