2017-02-23 89 views
1

Я пытаюсь добавить контекстное меню в Forms.DataGridView. Моя попытка не работает <wf:MenuItem Text="Save" Click="menuFEInsertLine_Click">, сообщая мне, что MenuItem не может быть добавлен в MenuItemCollection. А также ожидается, что String. Как я могу заставить этот xaml работать?WPF Forms DataGridView ContextMenu

<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.Icon') во второй' MenuItem' не имеют 'ВФ:' имен. .. ты уверен, что это правильно? – 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