如何在C#WPF中相互排除两个事件(互斥事件)?

时间:2015-05-07 08:34:58

标签: .net wpf c#-4.0 wpf-4.0

考虑一个示例WPF应用程序,它具有带滚动的图像查看器。 用户可以通过按箭头键和鼠标滚动来扫描图像。

如何相互排除这两个事件Keydown和MouseWheel。 ?

在MouseWheel(滚动)事件期间,按键事件不应该起作用,反之亦然。

我尝试过使用旗帜,但它没有成功。

我试过的示例代码。

internal bool KeyPress; // by default false
   internal bool IsMouseScrollActive; // by default false
   private void Grid_MouseWheel(object sender, MouseWheelEventArgs e)
    {
        if (!KeyPress)
        {
            IsMouseScrollActive = true;
            // event handlers here
            IsMouseScrollActive = false;
        }
    }

    private void Window_KeyDown(object sender, KeyEventArgs e)
    {
        switch (e.Key)
        {
            case Key.Left:
            case Key.Down:                    
            case Key.Right:
            case Key.Up:
                if (!IsMouseScrollActive)
                {
                    KeyPress = true;
                     // event handlers here
                }
                break;
        }
    }



    private void Window_KeyUp(object sender, KeyEventArgs e)
    {
        switch (e.Key)
        {
            case Key.Left:
            case Key.Down:
            case Key.Right:
            case Key.Up:
                if (!IsMouseScrollActive)
                {
                    KeyPress = false;
                    // event handlers here
                }
                break;
        }
    }

1 个答案:

答案 0 :(得分:0)

使用您的符号:

private void Window_KeyDown(object sender, KeyEventArgs e)
{
     if (IsMouseScrollActive)
           e.Handled = true;   //will cancel KeyDown event   

}

类似的逻辑适用于您的滚动或键盘事件......