这个应该可以用触发器来实现的,不过也有别的办法。监听DataGrid的LoadingRow事件,参数e中有行的引用,给这引用的MouseEnter事件加委托,e.Row.MouseEnter += Row_MouseEnter;,Row_MouseEnter中的sender参数就是鼠标进入的行的引用。亲测有效,主要的代码:
private void TestGrid_LoadingRow(object sender, DataGridRowEventArgs e)
{
e.Row.MouseEnter += Row_MouseEnter;
}
void Row_MouseEnter(object sender, MouseEventArgs e)//不需要绑定到wpf中
{
DataGridRow row = (DataGridRow)sender;
MessageBox.Show(row.GetIndex().ToString());
}
通过上面的函数,再加一个标志位到dataGrid_MouseUp中
private void dataGrid_MouseUp(object sender, MouseButtonEventArgs e)
{
Console.WriteLine("dataGrid_MouseUp");
g_selectIndex = dataGrid.SelectedIndex;
Console.WriteLine("鼠标弹起SelectionChanged选择第几行{0},有效性{1}", g_selectIndex, g_selectVaild);
b_powerOneTimeIndex = false;
}
然后在dataGrid_SelectionChanged的wpf事件中
if (b_powerOneTimeIndex)//修复一个bug 第一次界面选中行数不对
{
dataGrid.SelectedIndex= g_selectIndexPower;
g_selectIndex = g_selectIndexPower;
Console.WriteLine("SelectionChanged选择第几行测试{0}", g_selectIndex);
Console.WriteLine("SelectionChanged选择第几行测试{0}", g_selectIndex);
}