【发布时间】:2009-02-02 20:45:20
【问题描述】:
在我看来,没有办法检测拖动操作是否成功,但必须有某种方法。假设我想执行从源到目的地的“移动”。如果用户在某个不能接受放置的应用或控件上释放鼠标,我该如何判断?
就此而言,我怎么知道拖动完成的时间?
我看到了this question,但他的解决方案对我不起作用,而e.Action 总是 Continue。
【问题讨论】:
标签: c# wpf drag-and-drop
在我看来,没有办法检测拖动操作是否成功,但必须有某种方法。假设我想执行从源到目的地的“移动”。如果用户在某个不能接受放置的应用或控件上释放鼠标,我该如何判断?
就此而言,我怎么知道拖动完成的时间?
我看到了this question,但他的解决方案对我不起作用,而e.Action 总是 Continue。
【问题讨论】:
标签: c# wpf drag-and-drop
我不确定这是否可以帮助您,但 DoDragDrop 方法返回最终的 DragDropEffects 值。
var ret = DoDragDrop( ... );
if(ret == DragDropEffects.None) //not successfull
else // etc.
【讨论】:
啊,我想我明白了。原来对 DoDragDrop 的调用实际上是同步(多么蹩脚),并返回一个值DragDropEffects,如果操作失败,则设置为None。所以基本上这意味着只要用户处于拖动过程中,应用程序(或至少 UI 线程)就会被冻结。这对我来说似乎不是一个非常优雅的解决方案。
好的 cz_dl 我看到你刚刚发布了那个东西,所以我会给你答案。
不过我不明白:目的地如何确定操作应该是移动还是副本?这不应该取决于源应用吗?
【讨论】:
还不能添加评论,所以另一个答案。 当我第一次看到 DoDragDrop 被同步调用并且不知何故并没有冻结 UI 时,我也很惊讶。
但是我认为复制/移动的东西是完全合乎逻辑的。您可以在源应用程序中调用 DoDragDrop 方法时指定允许的效果,这对您来说很重要。目标应用程序将如何处理和使用它所决定的数据。
【讨论】: