gpt4 book ai didi

wpf - 获取 DoDragDrop DragSource

转载 作者:行者123 更新时间:2023-12-03 14:50:54 25 4
gpt4 key购买 nike

WPF DragDrop.DoDragDrop方法有 DragSource作为它的第一个参数。

有没有办法获得这个DragSource OnDrop 中的对象或其他拖放事件?

最佳答案

简短的回答是否定的,因为当您收到 Drag 事件(或 DragEnter 等)时,拖动源对象可能在任何地方。它可能在另一个过程中。它可以是 native 代码。如果类似 RDP 的协议(protocol)足够复杂,可以处理它,它甚至可以在另一台机器上。换句话说,不能保证托管的 DoDragDrop 甚至被调用,如果是,则不能保证它是从这个进程调用的。

但是 如果您正在编写调用 DoDragDrop 的代码并且还在为 OnDrop() 编写代码,有一个简单的方法来获得这种效果:

在对 DoDragDrop 的调用中,将对象添加为额外格式:

 var dragSource = this;
var data = "Hello";

var dataObj = new DataObject(data);
dataObj.SetData("DragSource", dragSource);
DragDrop.DoDragDrop(dragSource, dataObj, DragDropEffects.Copy);

现在在 OnDrag 处理程序中很容易获得拖动源:
protected override void OnDrop(DragEventArgs e)
{
var data = e.Data.GetData(DataFormats.Text);
var dragSource = e.Data.GetData("DragSource");
...
}

在某些情况下,知道源对象本身就足以获取完成拖动操作所需的数据,在这种情况下,上述情况归结为:
 DragDrop.DoDragDrop(dragSource, dragSource, DragDropEffects.Copy);

...

var dragSource = e.Data.GetData(typeof(MyDragSource));

请注意,在任何一种情况下,如果拖动操作的来源不是您的代码(例如从 Emplorer 拖动文件),您将得到 dragSource=null

关于wpf - 获取 DoDragDrop DragSource,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1719013/

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