2015-05-07 165 views
2

考慮一個示例WPF應用程序,它具有帶滾動的圖像查看器。 用戶可以通過按箭頭鍵以及通過鼠標滾動來滾動圖像。如何在C#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; 
     } 
    } 
+0

你說的'在鼠標滾輪(滾動)事件,鍵按下事件意味着不應該工作,反之亦然。「?你是否希望事件'Grid_MouseWheel'和'Window_KeyDown'不被同時觸發或其他東西? – CarbineCoder

+0

是的。當發生事件處理程序時,不應該同時觸發事件處理程序。 – raj

+0

事件處理函數的默認行爲滿足您的條件 – CarbineCoder

回答

0

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

} 

類似的邏輯也適用於您的滾動或鍵向上事件......