如何判断拖放操作是否失败?

时间:2009-02-02 20:45:20

标签: c# wpf drag-and-drop

在我看来,无法检测拖动操作是否成功,但必须有某种方法。假设我想从源到目的地执行“移动”。如果用户将鼠标放在某些不能接受掉落的应用程序或控件上,我该怎么说?

就此而言,如何判断拖动何时完成?

我看到了this question,但他的解决方案对我不起作用,e.Action 总是 Continue

3 个答案:

答案 0 :(得分:7)

我不确定这是否可以帮到你,但DoDragDrop方法返回最终的DragDropEffects值。

var ret = DoDragDrop( ... );
if(ret == DragDropEffects.None) //not successfull
else // etc.

答案 1 :(得分:3)

啊,我想我已经明白了。原来对DoDragDrop的调用实际上是同步(如何失败),并返回值DragDropEffects,如果操作失败则设置为None。所以基本上这意味着只要用户处于拖动的中间,app(或至少是UI线程)就会被冻结。对我来说,这似乎不是一个非常优雅的解决方案。

好的cz_dl我看到你刚发布了这件事,所以我会给你答案。

这个我不明白:目的地如何确定op应该是移动还是副本?这不应该取决于源应用程序吗?

答案 2 :(得分:0)

无法添加评论,所以另一个答案。 当我第一次看到DoDragDrop被同步调用时,我也感到很惊讶,它不知何故不会冻结UI。

但我相信复制/移动的东西是完全合乎逻辑的。您可以在源应用程序中调用DoDragDrop方法时指定允许的效果,这对您来说非常重要。目标应用程序将如何处理和使用它所依据的数据。