[WPF]DataGridをクリックしたセルの位置を調べる
C# WPF環境でDataGridをクリックした時のセル位置を求める。VisualTreeHelperを使ってDataGridCellとDataGridRowをたぐってcolumnとrowを調べる。formと違ってめんどくさい。他にも方法があるかもしんない。
//
// DataGrid dg ... Clicked Control
// Point pos ... Position in DataGrid axis
//
HitTestResult result = VisualTreeHelper.HitTest(dg, pos);
if (result == null)
{
return;
}
DependencyObject dep = result.VisualHit;
while (!(dep is DataGridCell || dep is DataGridRow))
{
if (dep == null)
{
return null;
}
dep = VisualTreeHelper.GetParent(dep);
}
DataGridCell dgcell = null;
int c = -1;
if (dep is DataGridCell)
{
dgcell = dep as DataGridCell;
c = dgcell.Column.DisplayIndex;
}
while (!(dep is DataGridRow))
{
if (dep == null) {
return null
}
dep = VisualTreeHelper.GetParent(dep);
}
DataGridRow dgr = dep as DataGridRow;
r = dgr.GetIndex();
//
// c ... column
// r ... row
//