2011-05-25 92 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