WPF DataGrid のどの行を右クリックしたかに応じて、ContextMenu にさまざまなオプションを表示する必要があります。私の最初のアイデアは、マウス クリック イベントをバインドまたは処理することでこれを達成することでしたが、これまでのところ、どちらの方法でも成功していません。どんな助けでも大歓迎です!
ありがとうございました!
デニス
WPF DataGrid のどの行を右クリックしたかに応じて、ContextMenu にさまざまなオプションを表示する必要があります。私の最初のアイデアは、マウス クリック イベントをバインドまたは処理することでこれを達成することでしたが、これまでのところ、どちらの方法でも成功していません。どんな助けでも大歓迎です!
ありがとうございました!
デニス
DataGrid の ContextMenuOpening イベントを処理し、ルーティング イベントの元のソースに基づいて、コンテキスト メニューを調整できます。
以下は、元のソースのデータ コンテキストが Inventory タイプの場合にコンテキスト メニューを表示するサンプルです。それ以外の場合は、イベントを処理してコンテキスト メニューを表示しません。
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
今すぐあなたを助けるには遅すぎると確信していますが、遅すぎない場合と、これに遭遇した他の人にとっては.
ContextMenuOpening イベントの ContextMenuEventArgs 引数から OriginalSource を試すことができます。
DataGridResults.ContextMenuOpening += (sender, args) =>
{
var frameworkElement = args.OriginalSource as FrameworkElement;
var gridRow = frameworkElement != null ? frameworkElement.TemplatedParent as DataGridRow : null;
}
ただし、TemplatedParent の使用は、データグリッド項目がどのようにバインドされたかに依存することに注意してください。