为什么OnMouseDown(...)
中的CaptureMouse()
引发OnMouseMove(...)
事件?
public partial class MainWindow : Window {
public MainWindow() {
InitializeComponent();
}
protected override void OnMouseDown(MouseButtonEventArgs e) {
Trace.WriteLine( "OnMouseDown: Begin" );
CaptureMouse();
Trace.WriteLine( "OnMouseDown: End" );
}
protected override void OnMouseMove(MouseEventArgs e) {
if (IsMouseCaptured) Trace.WriteLine( "OnMouseMove" );
}
protected override void OnMouseUp(MouseButtonEventArgs e) {
Trace.WriteLine( "OnMouseUp" );
ReleaseMouseCapture();
}
}
输出:
OnMouseDown: Begin
OnMouseMove // Wtf???
OnMouseDown: End
OnMouseMove
OnMouseMove
OnMouseMove
OnMouseUp
更新
MouseDevice.Capture()
调用引发输入事件的MouseDevice.Synchronize()
。
If只使用一个常规的WPF主窗口重新创建了您的情况
然后我像您一样重写OnMouseDown
和OnMouseMove
,并将CaptureMouse()
添加到OnMouseDown
方法中
然后,每次调用每个方法时,我都会向控制台写入当前日期时间的毫秒值
我得到了以下结果:
OnMouseMove |247
OnMouseMove |386
OnMouseMove |656
OnMouseDown |814
OnMouseDown |702
OnMouseDown |798
OnMouseDown |587
OnMouseDown |88
OnMouseMove |96
OnMouseMove |98
OnMouseMove |102
你可以看到,我只是移动了鼠标,然后点击了几次,然后又移动了鼠标。这不会导致在调用OnMouseDown
时调用OnMouseMove
。
你有没有试图在一个新的干净的WPF中重现你的处境?
编辑:
更新代码后,我遇到了同样的问题。我现在没有解决办法/理由。