2017-02-15 1 views
0

Ich habe ein DataGrid und ich möchte ein Kontextmenü mit der rechten Maustaste öffnen, und filtern Sie es in der Basis einer Eigenschaft des ausgewählten Elements.WPF DataGrid SelectItem BeforeRightClick

Das Problem ist, dass mit „fileGrid_MouseRightButtonUp“ das ausgewählte Element das unter dem Cursor isnot, aber die previeouly eines ausgewählt.

Also wie kann ich das Element des Datagrid auf Rechtsklick auswählen?

Seine WPF im Gespräch über

Das Stück Code:

 private void fileGrid_MouseRightButtonUp(object sender, MouseButtonEventArgs e) 
    { 
     if (fileGrid.SelectedItems.Count != 0) 
     { 
      if(fileGrid.SelectedItems.Count == 1 && !(fileGrid.SelectedItem as FileD).EsAudio) 
      { 
       cMenu.Items.Filter = item => 
       { 
        var it = item as MenuItem; 
        return it.Header.ToString() != "ConvertToAudio"; 
       }; 
      } 
      else 
      { 
       cMenu.Items.Filter = item => 
       { 
        return true; 
       }; 
      } 
     } 
    } 
+0

Diese Antwort ist für winforms, mi Frage ist über wpf –

+0

Bitte posten Sie Ihren Code auch. – Ron

Antwort

0

Basierend auf this article, können Sie

private void DataGrid_MouseRightButtonUp(object sender, MouseButtonEventArgs e) 
    { 
     DependencyObject dep = (DependencyObject)e.OriginalSource; 

     // iteratively traverse the visual tree 
     while ((dep != null) && !(dep is DataGridCell) && !(dep is DataGridColumnHeader)) 
     { 
      dep = VisualTreeHelper.GetParent(dep); 
     } 

     if (dep == null) 
      return; 

     if (dep is DataGridColumnHeader) 
     { 
      DataGridColumnHeader columnHeader = dep as DataGridColumnHeader; 
      // do something 
     } 

     if (dep is DataGridCell) 
     { 
      DataGridCell cell = dep as DataGridCell; 
      // do something 
     } 
    } 
+0

danke das war was ich gesucht habe! –

1

Versuchen Sie so etwas wie dieses,

private void fileGrid_MouseRightButtonUp(object sender, MouseButtonEventArgs e) 
    { 
     foreach (var item in fileGrid.Rows) 
        { 
         if (item.IsMouseOver) 
         { 
          fileGrid.SelectedIndex = item.Index; 
          break; 
         } 
        } 
//Then do what you want to do. 
    }