void MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
Mouse.Capture(this.eventSource);
BlockA();
}
void MouseMove(object sender, MouseEventArgs e)
{
if (e.LeftButton == MouseButtonState.Pressed)
BlockB();
}
是否保证BlockA()始终在BlockB()之前运行?我在WPF下使用C#。我遇到了一个只在某些系统中发生的奇怪错误。我怀疑事件顺序很重要,但我在MSDN上找不到任何有关此事的文献。谢谢。
答案 0 :(得分:5)
没有。如果在窗口外按下按钮,然后向内移动,则会触发。你应该设置一个布尔值来知道你抓住了鼠标。
答案 1 :(得分:2)
Mouse.Capture(this.eventSource);
会导致MouseMove
事件。
要始终在BlockA()
之前执行BlockB()
,请将MouseLeftButtonDown()
更改为:
void MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
BlockA();
Mouse.Capture(this.eventSource);
}
答案 2 :(得分:1)
我找到了WinForm的事件顺序,但我想它在WPF Mouse Event in Windows Form中是相同的
如果要以正确的顺序处理鼠标单击事件,则需要知道在Windows窗体控件中引发单击事件的顺序。当按下并释放鼠标按钮时(无论使用哪个鼠标按钮),所有Windows窗体控件都以相同的顺序引发单击事件,除非以下列表中提到了各个控件。以下列表显示了为单个鼠标按钮单击引发的事件的顺序: MouseDown事件。
点击活动。
MouseClick事件。
MouseUp事件。为双击鼠标按钮而引发的事件顺序:
MouseDown事件。
点击活动。
MouseClick事件。
MouseUp事件。
MouseDown事件。
DoubleClick活动。
MouseDoubleClick事件。
MouseUp事件。
答案 3 :(得分:1)
您可以使用PreviewMouseLeftButtonDown事件代替MouseLeftButtonDown来达到您的要求。
此致 Riyaj Ahamed I