2016-08-06 36 views
0

Ich versuche eine einfache Methode wie unten zu schreiben, die eine Bedingung wahr macht, wenn ein Benutzer auf das Datagrid geklickt hat, aber nicht in einer Zeile.Ermitteln, wann der Benutzer innerhalb von Datagrid geklickt hat, aber nicht in einer Zeile

Ich kann nur Informationen finden, wie dies mit einem Datagridview zu tun, aber das Wpf DataGrid scheint nicht die gleiche Funktionalität zu haben.

private void dataGrid_MouseLeftButtonUp(object sender, MouseButtonEventArgs e) 
    { 
     Point where = new Point(); 
     var ht = dataGrid.InputHitTest(where); 

     if (ht.) 
     { 
      //clicked on grey area 
     } 
    } 

Antwort

1
<DataGrid UIElement.PreviewMouseLeftButtonDown="DataGrid_PreviewMouseLeftButtonDown" ... > 

Code:

private void DataGrid_PreviewMouseLeftButtonDown(object sender, MouseButtonEventArgs e) 
    { 
     System.Diagnostics.Debug.WriteLine(e.OriginalSource.ToString()); 
     DependencyObject parent = VisualTreeHelper.GetParent((Visual)e.OriginalSource); 
     while (parent as DataGrid == null && parent as DataGridRow == null) 
     { 
      parent = VisualTreeHelper.GetParent(parent); 
     } 
     if (parent as DataGrid != null) 
      MessageBox.Show("Clicked inside DataGrid"); 
     else if (parent as DataGridRow != null) 
      MessageBox.Show("Clicked inside DataGridRow"); 
    }