gpt4 book ai didi

c# - 如何重写 WPF DataGrid 行为以实现对外部应用程序的拖放操作?

转载 作者:太空狗 更新时间:2023-10-29 23:49:35 24 4
gpt4 key购买 nike

我有一个具有以下定义的 WPF DataGrid。

<DataGrid Name="DataGridFoo"
AutoGenerateColumns="False"
ItemsSource="{Binding GridData}"
IsReadOnly="True"
SelectionMode="Extended"
SelectionUnit="CellOrRowHeader">

这允许我让用户选择单元格的“区域”。 DataGrid 绑定(bind)到一个可观察的集合。 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 中单元格的“不规则”选择:

enter image description here

我不清楚如何进行,对此有几个问题:

1) 我应该覆盖哪些事件,以便/Left Mouse click 不会影响当前选定的单元格?

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

3) 确定以上内容后,下一步是什么?是否将数据复制到剪贴板以供外部放置使用?

4)我需要覆盖 DataGrid 上的哪些事件(如果有)才能使其正常工作?

谢谢

最佳答案

要拖放的基本事件是: events to drag and drop

特别是 DragLeave 和 Drop 来做你想做的事。然后您需要从您的 VM 控制(删除/添加)GridData 属性以搜索和移动值。我强烈推荐像 Telerik 这样的第 3 方来做。

关于c# - 如何重写 WPF DataGrid 行为以实现对外部应用程序的拖放操作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43222356/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com