5

を右クリックするためWPF DataGridのイベントがあります。イベントハンドラ内にアクセスする方法は?MouseRightButtonUpDataGridDataGridCell

private void DataGrid_MouseRightButtonUp(object sender, MouseButtonEventArgs e)
{
      //access DataGridCell on which mouse is right clicked
      //Want to access cell here
}
4

1 に答える 1

12

何らかの理由でビジュアル ツリー ヘルパーを使用するのはあまり好きではありませんが、このような場合には使用できます。

基本的には、右ボタンがクリックされたときにマウスの下にあるコントロールのヒット テストを行い、セル オブジェクトにヒットするまでビジュアル ツリー ヘルパー クラスを使用してビジュアル ツリーを上に移動します。

private void DataGrid_MouseRightButtonUp_1(object sender, System.Windows.Input.MouseButtonEventArgs e)
{
    var hit = VisualTreeHelper.HitTest((Visual)sender, e.GetPosition((IInputElement)sender));
    DependencyObject cell = VisualTreeHelper.GetParent(hit.VisualHit);
    while (cell != null && !(cell is System.Windows.Controls.DataGridCell)) cell = VisualTreeHelper.GetParent(cell);
    System.Windows.Controls.DataGridCell targetCell = cell as System.Windows.Controls.DataGridCell;

    // At this point targetCell should be the cell that was clicked or null if something went wrong.
}
于 2012-11-19T16:49:34.543 に答える