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,但沒有奏效。
如果我可以發現鼠標已經捕獲到了一些其他對象,我可以在行爲中放置條件以不再捕獲它。
噢..這就是這麼簡單..我試圖尋找這隻,但錯過了莫名其妙。有效。感謝H.B.的答覆。 –