3

WPF DataGrid のどの行を右クリックしたかに応じて、ContextMenu にさまざまなオプションを表示する必要があります。私の最初のアイデアは、マウス クリック イベントをバインドまたは処理することでこれを達成することでしたが、これまでのところ、どちらの方法でも成功していません。どんな助けでも大歓迎です!

ありがとうございました!

デニス

4

2 に答える 2

4

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

今すぐあなたを助けるには遅すぎると確信していますが、遅すぎない場合と、これに遭遇した他の人にとっては.

于 2009-11-13T15:00:20.687 に答える
0

ContextMenuOpening イベントの ContextMenuEventArgs 引数から OriginalSource を試すことができます。

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

ただし、TemplatedParent の使用は、データグリッド項目がどのようにバインドされたかに依存することに注意してください。

于 2015-04-01T15:27:51.003 に答える