/ / Wie füge ich ein ContextMenu hinzu, je nachdem welche WPF DataGrid-Zeile mit der rechten Maustaste angeklickt wird? - WPF, Datagrid, Kontextmenü, Zeile, Rechtsklick

Wie fügt man ein ContextMenu hinzu, abhängig davon, auf welche WPF DataGrid-Zeile mit der rechten Maustaste geklickt wird? - wpf, datagrid, Kontextmenü, Zeile, rechte Maustaste

Ich muss verschiedene Optionen in einem anzeigenContextMenu, abhängig davon, auf welche Zeile eines WPF-DataGrid mit der rechten Maustaste geklickt wird. Meine ersten Ideen waren, dies entweder durch das Binden oder das Bearbeiten eines Mausklickereignisses zu erreichen, aber mit beiden Strategien war ich bisher noch nicht erfolgreich. Jede Hilfe wäre sehr dankbar!

Vielen Dank!

Denise

Antworten:

5 für die Antwort № 1

Sie können das ContextMenuOpening-Ereignis des DataGrid behandeln und basierend auf der ursprünglichen Quelle des Routingereignisses, an das Sie das Kontextmenü anpassen.

Nachfolgend ein Beispiel, in dem ein Kontextmenü angezeigt wird, wenn der Datenkontext der ursprünglichen Quelle vom Typ Inventory ist. Andernfalls zeige ich das Kontextmenü nicht durch die Behandlung des Ereignisses.

Private Sub InventoriesDataGrid_ContextMenuOpening( _
ByVal sender As Object, _
ByVal e As System.Windows.Controls.ContextMenuEventArgs) Handles _
InventoriesDataGrid.ContextMenuOpening

Dim context = DirectCast(e.OriginalSource, System.Windows.FrameworkElement).DataContext

If TypeOf context Is Inventory Then
InventoriesDataGrid.ContextMenu = InventoriesDataGrid.Resources("DefaultContextMenu")
Else
e.Handled = True "Do not show context menu.
End If
End Sub

Ich bin mir sicher, dass es zu spät ist, um Ihnen jetzt zu helfen, aber für den Fall, dass es nicht zu spät ist und für alle anderen, die auf dieses Problem stoßen.


0 für die Antwort № 2

Sie können die OriginalSource aus dem ContextMenuEventArgs-Argument im ContextMenuOpening-Ereignis versuchen:

DataGridResults.ContextMenuOpening += (sender, args) =>
{
var frameworkElement = args.OriginalSource as FrameworkElement;
var gridRow = frameworkElement != null ? frameworkElement.TemplatedParent as DataGridRow : null;
}

Beachten Sie jedoch, dass die Verwendung von TemplatedParent davon abhängt, wie die Datagrid-Elemente gebunden wurden