当用户将鼠标光标放在一行上时,是否有可以使用的事件?基本上我需要在光标改变行
时更改行的工具提示到目前为止我有这样的事情
<Style TargetType="DataGridRow">
<Style.Triggers>
<Trigger Property="IsMouseOver"
Value="True">
<EventSetter Event="PreviewMouseMove" Handler="MouseMoveEvent"></EventSetter>
</Trigger>
</Style.Triggers>
</Style>
但它不太有用。
谢谢
答案 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>