MouseMove之前的MouseDown总是在C#WPF中得到保证?

时间:2014-01-22 02:35:09

标签: c# wpf

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上找不到任何有关此事的文献。谢谢。

4 个答案:

答案 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