1

我創建了一個包含Canvas和Canvas的用戶控件。爲了能夠在畫布上移動的按鈕,我連着下面所示的DragBehavior:如何查找是否已捕獲鼠標

class DragOverCanvasBehavior : Behavior<FrameworkElement> 
{ 
    private Point _mouseStartPosition; 

    protected override void OnAttached() 
    { 

     AssociatedObject.MouseLeftButtonDown += (sender, e) => 
               { 
                _mouseStartPosition =               e.GetPosition((Canvas) AssociatedObject.Parent); 
                AssociatedObject.CaptureMouse(); 
               }; 

     AssociatedObject.MouseLeftButtonUp += (sender, e) => AssociatedObject.ReleaseMouseCapture(); 

     AssociatedObject.MouseMove += (sender, e) => 
     { 
      var point = e.GetPosition((Canvas)AssociatedObject.Parent) - _mouseStartPosition; 
      if (AssociatedObject.IsMouseCaptured) 
      { 
       Canvas.SetTop(AssociatedObject, point.Y); 
       Canvas.SetLeft(AssociatedObject, point.X); 
      } 
     }; 
    } 
} 

對於一個企業的原因,我需要的,如果我認爲還要移動畫布並拖動畫布。我用一個類似的Behavior類做了它,它改變了Canvas的邊距,並給它看起來好像它在拖動時隨着鼠標指針一起移動。此行爲還捕獲鼠標。

現在的問題是 - 如果我點擊並拖動按鈕,畫布也會獲取鼠標事件並開始拖動。我怎樣才能確保當我拖動按鈕的畫布行爲不會得到鼠標事件。

我試圖把行爲e.Handled = true,但沒有奏效。

如果我可以發現鼠標已經捕獲到了一些其他對象,我可以在行爲中放置條件以不再捕獲它。

回答

5

測試Mouse.Captured!= null

+0

噢..這就是這麼簡單..我試圖尋找這隻,但錯過了莫名其妙。有效。感謝H.B.的答覆。 –