WPF窗口LocationChanged结束

edf*_*foh 6 wpf

我有一个WPF窗口,我想确定用户何时完成在桌面上移动窗口.我连接到LocationChanged事件,这很好,但我无法弄清楚如何确定用户何时停止移动窗口(通过释放鼠标左键).

没有事件可以帮助我确定,比如LocationChangedEnded事件.我尝试连接到MouseLeftButtonUp,但该事件永远不会被触发.

有人有什么想法吗?

Ore*_*ner 7

两种可能的方法是:

  1. 你真的不知道什么时候提出鼠标按钮.相反,您等待窗口停止发送这些移动事件.设置一个短暂的计时器,每次收到窗口移动事件时都会开始计时.如果计时器已经打开,请重置计时器.当您收到计时器事件时,例如在几百毫秒之后,您可以假设用户停止移动窗口.即使使用高分辨率鼠标,当按住鼠标左键并试图保持静止时,抖动将继续发送移动事件.这种方法记录在这里.

  2. 尝试从窗口的非客户端区域捕获鼠标通知.您可以设置窗口消息挂钩来捕获窗口消息.一旦看到第一个窗口移动事件,钩子就可以开始寻找WM_NCLBUTTONUP事件.这种方法避免了计时器和猜测.但是,它假设Windows允许用户定位窗口的方式,并且在某些情况下可能会失败,例如,如果用户仅使用键盘移动用户(Alt + Space,M,箭头键).