如何覆盖WPF DataGrid行为以实现拖放到外部应用程序?

Joh*_*hnB 5 c# wpf datagrid

我有一个WPF DataGrid,其定义如下.

<DataGrid Name="DataGridFoo"
  AutoGenerateColumns="False"
  ItemsSource="{Binding GridData}"
  IsReadOnly="True"
  SelectionMode="Extended"
  SelectionUnit="CellOrRowHeader">
Run Code Online (Sandbox Code Playgroud)

这允许我让用户选择单元格的"区域".DataGrid绑定到一个可观察的集合.XAML列定义隐藏了一些列,一些可见如下:

<DataGridTextColumn Binding="{Binding InvoiceID}"
   Header="Invoice ID"
   Visibility="Hidden"
   Width="Auto"/>                
<DataGridTextColumn Binding="{Binding InvoiceNumber}"
   Header="Invoice Number"
   Visibility="Visible"
   Width="Auto"/>
<DataGridTextColumn 
   Binding="{Binding InvoiceDate, StringFormat=\{0:MM/dd/yy\}}"
   Header="Invoice Date"
   Visibility="Visible"
   Width="Auto"/>
Run Code Online (Sandbox Code Playgroud)

我还为DataGrid定义了一个鼠标右键按钮上下文菜单:

<DataGrid.ContextMenu>
  <ContextMenu FontSize="16"  Background="#FFE6E9EC">
    <MenuItem Header="Contact" Click="Contact_Click" />
    <Separator  />
    <MenuItem Header="Copy" Command="Copy" />
  </ContextMenu>
</DataGrid.ContextMenu>
Run Code Online (Sandbox Code Playgroud)

我希望能够将当前选定单元格的副本单击,拖放到外部应用程序中.我正在考虑使用按"Alt键"和鼠标左键单击的组合来启动DragDrop操作.

例如,考虑DataGrid中"不规则"的单元格选择:

在此输入图像描述

我不清楚如何处理并对此有几个问题:

1)我覆盖哪些事件,以便/鼠标左键单击不影响当前选定的单元格?

2)如何确定鼠标左键单击是否在所选单元格的区域内发生?我该如何处理数据?

3)一旦我确定了上述内容,下一步是什么?是否将数据复制到剪贴板以便在外部删除中使用?

4)我需要在DataGrid上覆盖哪些事件(如果有的话)以使其工作?

谢谢

小智 0

拖放的基本事件有: 拖放事件

特别是 DragLeave 和 Drop 可以完成您想要的操作。然后,您需要从虚拟机中控制(删除/添加)GridData 属性以搜索和移动值。我强烈推荐像 Telerik 这样的第三方来做这件事。