MouseOver上的WPF DataGridRow触发事件

时间:2014-07-23 09:36:13

标签: c# wpf xaml

当用户将鼠标光标放在一行上时,是否有可以使用的事件?基本上我需要在光标改变行

时更改行的工具提示

到目前为止我有这样的事情

 <Style TargetType="DataGridRow">
         <Style.Triggers>
            <Trigger Property="IsMouseOver"
                         Value="True">
               <EventSetter Event="PreviewMouseMove" Handler="MouseMoveEvent"></EventSetter>
            </Trigger>
         </Style.Triggers> 
 </Style>

但它不太有用。

谢谢

2 个答案:

答案 0 :(得分:2)

您无法将EventSetter置于普通Trigger内。看似EventSetter只能在Style.Setters内使用(而不是Trigger.Setters),请参阅here,查看备注部分的最后一行。

在这种情况下,我认为您不需要动态更改处理程序,只需挂钩事件 一次 。所以将EventSetter置于Style.Setters内。同样最适合您的活动是MouseEnter,而不是PreviewMouseMove

<Style TargetType="DataGridRow">
   <EventSetter Event="MouseEnter" Handler="Row_MouseEnter"/>
</Style>

代码

private void Row_MouseEnter(object sender, MouseEventArgs e){
   //put your code here to set the ToolTip for each row
   //Here I just set the ToolTip to the index of the row
   var row = e.Source as DataGridRow;
   row.ToolTip = row.GetIndex().ToString();
}

另一种解决方案是命名您的DataGrid,以便我们可以在代码中引用它。然后为事件LoadingRow添加处理程序。在那里,您可以为每一行设置工具提示:

//inside the Window constructor after IntializeComponent()
dataGrid1.LoadingRow += (s,e) => {
    e.Row.Tooltip = e.Row.GetIndex().ToString(); 
};

另外,您应该考虑使用Binding来设置工具提示。这样你需要一个合适的ViewModel。

答案 1 :(得分:0)

一种方法是使用EventTriggers。 您需要捕获MouseEnter和MouseLeave事件。

<EventTrigger RoutedEvent="MouseEnter">
   ...
</EventTrigger>
<EventTrigger RoutedEvent="MouseLeave">
   ...
</EventTrigger>