WPF数据网格行在鼠标悬停时触发事件。

3

当用户将鼠标光标悬停在行上时,是否有可以使用的事件?基本上,当光标更改行时,我需要更改行的工具提示。

到目前为止,我有这样的东西:

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

但它并不完全有效。
谢谢。
2个回答

4
您不能将EventSetter放在普通的Trigger中。看起来EventSetter只能在Style.Setters(而不是Trigger.Setters)中使用,参见此处,请查看Remarks部分的最后一行。
在这种情况下,我认为您不需要动态更改处理程序,只需一次挂钩事件即可。因此,请将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 来设置 ToolTip。这样,您需要一个适当的 ViewModel。


0
有一种方法是使用EventTriggers。 您需要捕获MouseEnter和MouseLeave事件。
<EventTrigger RoutedEvent="MouseEnter">
   ...
</EventTrigger>
<EventTrigger RoutedEvent="MouseLeave">
   ...
</EventTrigger>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接