拖放操作禁用了MouseMove事件

15

在使用 DragDrop.DoDragDrop(...) 启动拖放操作后,不再触发鼠标移动事件。我甚至尝试了

AddHandler(Window.MouseMoveEvent, new MouseEventHandler(myControl_MouseMove), true); 

最后一个参数意味着我甚至选择处理事件,但是似乎没有机会,MouseMove事件根本没有被触发!在使用拖放时仍然可以获取MouseMove事件吗? 我想拖放一个控件,同时拖动该控件时它应该跟随鼠标指针移动。 有什么办法在这种情况下实现吗?


这个消息线程也证实了你所看到的内容:http://social.msdn.microsoft.com/Forums/en/wpf/thread/1053aaa4-d8b6-48d7-8d53-2af98e60d542 - Scott Whitlock
2个回答

9

我使用Snoop帮助我查看我的代码是否触发了DragOver事件而不是MouseMove事件。请参见:http://blois.us/Snoop/ - Zamboni
5
问题在于DragOver事件只在进入AllowDrop属性为True的控件的边界时触发,当鼠标在其中移动时不会重新触发。因此,您无法根据鼠标位置调整视觉反馈。GiveFeedback事件只在源上触发,而不是在您悬停的控件上触发。 - Scott Whitlock
顺便提一下,DragDrop类直到.NET 3.0才存在,但控件也有DragOver和GiveFeedback事件。 - reinierpost
@reinierpost:WPF本身直到.Net 3.0才存在。你把它和WinForms混淆了。 - SLaks
@Slaks:抱歉,我没有意识到这个问题是关于WPF的。我在这里是因为你的答案几乎回答了我Windows.Forms应用程序的同样问题。 - reinierpost
显示剩余3条评论

0

DragDrop.DoDragDrop是什么构造函数?实际上,DragDrop应该在MouseDown/MouseMove方法中调用,而不是在DragDrop方法中调用。它应该用于启动处理过程,而不是对拖放作出反应(您刚刚直接在DragDrop中实现了所需的拖放效果)。MouseMove在已经拖动时不会触发,可能这就是为什么它在您设置了该过程后也不会触发的原因。我认为您以错误的方式处理了这个问题,这是一个示例之一http://msdn.microsoft.com/en-us/library/aa984430%28v=vs.71%29.aspx


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接