首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >获取DoDragDrop DragSource

获取DoDragDrop DragSource
EN

Stack Overflow用户
提问于 2009-11-12 08:18:48
回答 1查看 12.7K关注 0票数 17

WPF DragDrop.DoDragDrop方法的第一个参数是DragSource

有没有办法在OnDrop或其他拖放事件中获取此DragSource对象?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2009-11-12 16:18:43

简短的答案是否定的,因为当您接收到拖动事件(或DragEnter等)时,拖动源对象可能在任何地方。它可能在另一个进程中。它可以是本机代码。如果类似RDP的协议足够复杂,它甚至可以在另一台机器上处理它。换句话说,不能保证调用了托管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

票数 23
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1719013

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档