首页 > 解决方案 > WPF 中的拖放事件是否可能不可靠地触发?

问题描述

我想知道 D&D 事件是否总是触发(DragLeave/DragEnter)。

我在我的 WPF GUI 中实现了一个 D&D 功能。在拖动一些元素时,我“拖动”了一个 GUI 元素。通常它会触发适当的“DragLeave”事件,但并非总是如此。我担心,由于某些速度原因,有时这些事件不会可靠地触发。如果是这样,我该如何克服这些问题?

标签: wpfdrag-and-drop

解决方案


简短版: 我自己编写了一些示例应用程序来检查它 - 是的 - DragLeave 事件触发不可靠。

长版:

我做了什么:

我将 aLabel作为可拖动对象放置在 aStackPanel中。然后我实现了MouseMoveDragLeave事件的代码。一个附加的TextBlock- 添加到StackPanel以及 - 用作事件输出。如果DragLeave处理程序被调用,我将其更改Text PropertyTextBlock发生 DragLeave ”。之后我测试了它,将它拖LabelStackPanel.

我认识的:

如果我足够或按下靠近边界的鼠标按钮,则不会触发LabelDragLeave事件。如果我做得很一切都会按预期进行。

我的结论是:

Label我想,如果鼠标在启动' ' 线程之前离开DoDragDrop,则不会触发事件,因为鼠标已经在Label. 所以在开始 D&D 和触发第一个事件之间存在一个小故障。

可以在处理程序中看到相同的行为DragOver/MouseMove。移动鼠标的速度越快,您可以在事件处理程序中捕获的点 (e.GetPosition(...)) 就越少。

问题是,对于DragLeave那个丢失的事件可能很关键,因为它只被触发一次。但是,该DragOver事件在拖动过程中经常被触发,并且丢失的事件可以在DragOver之后直接由下一个事件来平衡。


推荐阅读