2011-05-25 89 views
2

我有一個需要強調的DataGrid中,這似乎是很容易與這種風格的鼠標懸停行:WPF DataGrid行和列的風格問題

<Style TargetType="DataGridRow"> 
    <Style.Triggers> 
     <Trigger Property="IsMouseOver" Value="True"> 
      <Setter Property="Background" Value="Green"/> 
     </Trigger> 
    </Style.Triggers> 
</Style> 

的問題是,我也有一些風格定義爲只讀細胞:

<Style TargetType="DataGridCell"> 
    <Style.Triggers> 
     <Trigger Property="IsReadOnly" Value="True"> 
      <Setter Property="Background" Value="LightGoldenrodYellow"/> 
     </Trigger> 
    </Style.Triggers> 
</Style> 

其結果是,那些只讀細胞沒有得到鼠標懸停背景。我如何解決這個衝突?非常感謝您的幫助。

+0

編碼風格意味着代碼被寫入的風格。它不會影響UI的風格。請參閱[本說明](http://en.wikipedia.org/wiki/Programming_style)。 – 2011-05-25 11:11:03

+0

@蒙克卡特:我不明白你在說什麼。我說過編碼風格嗎? – newman 2011-05-25 12:50:57

+0

是的,你已經標記爲「編碼風格」。我編輯了你的帖子並將其刪除。 – 2011-05-25 13:03:08

回答

2

這不是衝突。 MouseOver事件旨在用於不是隻讀的普通行和單元格。

你應該爲這個問題添加一個MultiTrigger。

樣品:

<MultiTrigger> 
    <MultiTrigger.Conditions> 
     <Condition Property="IsReadOnly" Value="true" /> 
     <Condition Property="IsMouseOver" Value="true" /> 
    </MultiTrigger.Conditions> 
    <Setter Property="Background" Value="Green"/> 
    </MultiTrigger> 

的程式碼爲DataGridCell風格。完成的代碼示例爲:

<Style TargetType="DataGridCell">  
<Style.Triggers>   
     <MultiTrigger> 
     <MultiTrigger.Conditions> 
      <Condition Property="IsReadOnly" Value="true" /> 
      <Condition Property="IsMouseOver" Value="true" /> 
     </MultiTrigger.Conditions> 
     <Setter Property="Background" Value="Green"/> 
     </MultiTrigger> 
</Style.Triggers> 
</Style> 
+0

我只是想你的想法,我得到了一個編譯器錯誤:「無法找到'System.Windows.Controls.DataGridRow'類型的樣式屬性'IsReadOnly'。如何解決這個問題? – newman 2011-05-25 12:48:40

+0

我想你應該出上面的代碼在DataGridCell的樣式中,我將編輯和更新上面的代碼 – 2011-05-26 01:17:22

+0

我不認爲在DataGridCell上放置這個觸發器會起作用,因爲它只會突出顯示鼠標移過來的當前單元格,而不是整行 – newman 2011-05-26 03:01:07