【问题标题】:Is it possible that Drag and Drop events in WPF are not firing reliable?WPF 中的拖放事件是否可能不可靠地触发?
【发布时间】:2019-10-09 10:00:54
【问题描述】:

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

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

【问题讨论】:

标签: wpf drag-and-drop


【解决方案1】:

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

加长版:

我做了什么:

我将Label 作为可拖动对象放置在StackPanel 中。然后我实现了MouseMoveDragLeave 事件的代码。一个额外的TextBlock - 添加到StackPanel 以及 - 用作事件输出。如果调用了DragLeave 处理程序,我将TextBlockText Property 更改为'DragLeave 发生'。之后我测试了它,将Label 拖向StackPanel

我认识的:

如果我足够快或按下鼠标按钮接近Label的边界,DragLeave事件 > 解雇。如果我这样做,一切都按预期很好

我的结论:

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-01-28
    • 2014-04-27
    • 1970-01-01
    • 1970-01-01
    • 2011-04-04
    • 1970-01-01
    • 1970-01-01
    • 2014-02-20
    相关资源
    最近更新 更多