WPF 窗体 DataGridView 上下文菜单
WPF Forms DataGridView ContextMenu
我正在尝试向 Forms.DataGridView 添加上下文菜单。
我的尝试在 <wf:MenuItem Text="Save" Click="menuFEInsertLine_Click">
处失败,告诉我无法将 MenuItem 添加到 MenuItemCollection。而且 String 也是预期的。
我怎样才能让这个 xaml 工作?
<WindowsFormsHost Name="wfhFileEditorWindow" DockPanel.Dock="Top" HorizontalAlignment="Stretch" AllowDrop="True" Background="White" VerticalAlignment="Stretch">
<WindowsFormsHost.Child>
<local:DataGridViewEx x:Name="dgFileEditorWindow" AllowDrop="True" BackColor="White" BackgroundColor="White">
<local:DataGridViewEx.ContextMenu>
<wf:ContextMenu>
<wf:ContextMenu.MenuItems>
<wf:MenuItem Text="Save" Click="menuFEInsertLine_Click">
<wf:MenuItem.Icon>
<Image Source="star.png"/>
</wf:MenuItem.Icon>
</wf:MenuItem>
<wf:MenuItem Header="Save" Click="menuFEDeleteLine_Click">
<MenuItem.Icon>
<Image Source="delete.png"/>
</MenuItem.Icon>
</wf:MenuItem>
我通过覆盖 DataGridView 的两个方法解决了这个问题:
Private Sub dataGridView_MouseClick(ByVal sender As Object,
ByVal e As System.Windows.Forms.MouseEventArgs
) Handles Me.MouseClick
If e.Button = Forms.MouseButtons.Right Then
Dim m As New Forms.ContextMenu()
Dim hi As HitTestInfo = Me.HitTest(e.X, e.Y)
If hi.RowIndex >= 0 Then
m.MenuItems.Add(New Forms.MenuItem("Insert Line", AddressOf CType(Application.Current.MainWindow, MainWindow).menuFEInsertLine_Click))
End If
If hi.ColumnIndex >= 0 Then
If hi.RowIndex >= 0 Then
m.MenuItems.Add("-")
End If
m.MenuItems.Add(New Forms.MenuItem("Insert Column", AddressOf CType(Application.Current.MainWindow, MainWindow).menuFEInsertColumn_Click))
End If
m.Show(Me, New System.Drawing.Point(e.X, e.Y))
End If
End Sub
Private Sub dataGridView_MouseMove(ByVal sender As Object,
ByVal e As System.Windows.Forms.MouseEventArgs
) Handles Me.MouseMove
Try
Dim hi As HitTestInfo = Me.HitTest(e.X, e.Y)
If hi IsNot Nothing Then
Me.SetCurrentCellAddressCore(hi.ColumnIndex, hi.RowIndex, False, False, False)
End If
Catch ex As System.ArgumentOutOfRangeException
End Try
End Sub
我正在尝试向 Forms.DataGridView 添加上下文菜单。
我的尝试在 <wf:MenuItem Text="Save" Click="menuFEInsertLine_Click">
处失败,告诉我无法将 MenuItem 添加到 MenuItemCollection。而且 String 也是预期的。
我怎样才能让这个 xaml 工作?
<WindowsFormsHost Name="wfhFileEditorWindow" DockPanel.Dock="Top" HorizontalAlignment="Stretch" AllowDrop="True" Background="White" VerticalAlignment="Stretch">
<WindowsFormsHost.Child>
<local:DataGridViewEx x:Name="dgFileEditorWindow" AllowDrop="True" BackColor="White" BackgroundColor="White">
<local:DataGridViewEx.ContextMenu>
<wf:ContextMenu>
<wf:ContextMenu.MenuItems>
<wf:MenuItem Text="Save" Click="menuFEInsertLine_Click">
<wf:MenuItem.Icon>
<Image Source="star.png"/>
</wf:MenuItem.Icon>
</wf:MenuItem>
<wf:MenuItem Header="Save" Click="menuFEDeleteLine_Click">
<MenuItem.Icon>
<Image Source="delete.png"/>
</MenuItem.Icon>
</wf:MenuItem>
我通过覆盖 DataGridView 的两个方法解决了这个问题:
Private Sub dataGridView_MouseClick(ByVal sender As Object,
ByVal e As System.Windows.Forms.MouseEventArgs
) Handles Me.MouseClick
If e.Button = Forms.MouseButtons.Right Then
Dim m As New Forms.ContextMenu()
Dim hi As HitTestInfo = Me.HitTest(e.X, e.Y)
If hi.RowIndex >= 0 Then
m.MenuItems.Add(New Forms.MenuItem("Insert Line", AddressOf CType(Application.Current.MainWindow, MainWindow).menuFEInsertLine_Click))
End If
If hi.ColumnIndex >= 0 Then
If hi.RowIndex >= 0 Then
m.MenuItems.Add("-")
End If
m.MenuItems.Add(New Forms.MenuItem("Insert Column", AddressOf CType(Application.Current.MainWindow, MainWindow).menuFEInsertColumn_Click))
End If
m.Show(Me, New System.Drawing.Point(e.X, e.Y))
End If
End Sub
Private Sub dataGridView_MouseMove(ByVal sender As Object,
ByVal e As System.Windows.Forms.MouseEventArgs
) Handles Me.MouseMove
Try
Dim hi As HitTestInfo = Me.HitTest(e.X, e.Y)
If hi IsNot Nothing Then
Me.SetCurrentCellAddressCore(hi.ColumnIndex, hi.RowIndex, False, False, False)
End If
Catch ex As System.ArgumentOutOfRangeException
End Try
End Sub