【发布时间】:2017-08-30 13:07:03
【问题描述】:
我有一个具有以下定义的 WPF DataGrid。
<DataGrid Name="DataGridFoo"
AutoGenerateColumns="False"
ItemsSource="{Binding GridData}"
IsReadOnly="True"
SelectionMode="Extended"
SelectionUnit="CellOrRowHeader">
这让我可以让用户选择一个“区域”的单元格。 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"/>
我还为 DataGrid 定义了一个鼠标右键上下文菜单:
<DataGrid.ContextMenu>
<ContextMenu FontSize="16" Background="#FFE6E9EC">
<MenuItem Header="Contact" Click="Contact_Click" />
<Separator />
<MenuItem Header="Copy" Command="Copy" />
</ContextMenu>
</DataGrid.ContextMenu>
我希望能够将当前选定单元格的副本单击、拖放到外部应用程序中。我正在考虑使用按“Alt 键”和鼠标左键单击的组合来启动 DragDrop 操作。
例如,考虑 DataGrid 中单元格的“不规则”选择:
我不清楚如何进行,对此有几个问题:
1)我要覆盖哪些事件以使/鼠标左键不会影响当前选定的单元格?
2) 如何确定鼠标左键单击是否发生在选定单元格的区域内?如何处理数据片段?
3) 确定以上内容后,下一步是什么?是否将数据复制到剪贴板以供外部拖放使用?
4) 我需要在 DataGrid 上覆盖哪些事件(如果有)才能使其正常工作?
谢谢
【问题讨论】: