2017-02-23 76 views
1

我想添加一个contextmenu到Forms.DataGridView。 我的尝试失败<wf:MenuItem Text="Save" Click="menuFEInsertLine_Click">告诉我,MenuItem不能添加到MenuItemCollection。此外,该字符串预计。 我怎样才能让这个xaml工作?WPF表格DataGridView上下文菜单

<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> 
+0

第二'MenuItem'没有'WF的图标('MenuItem.Icon')。 ..你确定这是正确的吗? – Jcl

+0

这是不对的。我纠正了它,但它仍然在同一个地方休息。 – Adder

回答

0

我工作围绕这通过重写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