wpf - WPF 中的拖放事件是否可能不可靠地触发?
问题描述
我想知道 D&D 事件是否总是触发(DragLeave/DragEnter)。
我在我的 WPF GUI 中实现了一个 D&D 功能。在拖动一些元素时,我“拖动”了一个 GUI 元素。通常它会触发适当的“DragLeave”事件,但并非总是如此。我担心,由于某些速度原因,有时这些事件不会可靠地触发。如果是这样,我该如何克服这些问题?
解决方案
简短版: 我自己编写了一些示例应用程序来检查它 - 是的 - DragLeave 事件触发不可靠。
长版:
我做了什么:
我将 aLabel
作为可拖动对象放置在 aStackPanel
中。然后我实现了MouseMove
和 DragLeave
事件的代码。一个附加的TextBlock
- 添加到StackPanel
以及 - 用作事件输出。如果DragLeave
处理程序被调用,我将其更改Text
Property
为TextBlock
“发生 DragLeave ”。之后我测试了它,将它拖Label
向StackPanel
.
我认识的:
如果我足够快或按下靠近边界的鼠标按钮,则不会触发Label
该DragLeave
事件。如果我做得很慢,一切都会按预期进行。
我的结论是:
Label
我想,如果鼠标在启动' ' 线程之前离开DoDragDrop
,则不会触发事件,因为鼠标已经在Label
. 所以在开始 D&D 和触发第一个事件之间存在一个小故障。
可以在处理程序中看到相同的行为DragOver/MouseMove
。移动鼠标的速度越快,您可以在事件处理程序中捕获的点 (e.GetPosition(...)) 就越少。
问题是,对于DragLeave
那个丢失的事件可能很关键,因为它只被触发一次。但是,该DragOver
事件在拖动过程中经常被触发,并且丢失的事件可以在DragOver
之后直接由下一个事件来平衡。
推荐阅读
- mysql - MYSQL 排序结果分组前返回最新记录
- node.js - 如何解决 Pug 中 Json 数组的迭代问题
- android - 如何限制我的应用程序被屏幕共享?
- javascript - 我如何`.filter()`一个数组/对象并返回一个带有原始键的新数组,而不是作为过滤器返回的索引数组/对象?
- azure - 部署前条件:或阶段前条件
- javascript - 使用CSS在JS中打印html表单输入值或特定div内容
- c# - 从处理程序将图像添加到 excel
- c# - 运行 Visual Studio 2019 React 模板时出现错误 400
- java - 新数据插入,导致分页数据重复
- database - DB2 引发应用程序触发器