如何查找鼠标是否已被捕获

Sou*_*asu 1 wpf drag-and-drop mouseevent attachedbehaviors mousecapture

我创建了一个usercontrol,其中包含Canvas和Canvas上的Button.为了能够在画布上移动按钮,我附加了一个如下所示的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);
            }
        };
    }
}  
Run Code Online (Sandbox Code Playgroud)

出于商业原因,如果我按住并拖动画布,我也需要移动画布.我使用类似的Behavior类来改变Canvas边距并给它看起来好像它在拖动时随鼠标指针移动一样.此行为还捕获鼠标.

现在的问题是 - 如果我单击并拖动按钮,Canvas也会获取鼠标事件并开始被拖动.如何确保在拖动Button时Canvas Behavior不会获得鼠标事件.

我尝试在行为中放置e.Handled = true,但这不起作用.

如果我发现鼠标已经被捕获了一些其他对象,我可以在行为中设置条件,以便不再捕获它.

H.B*_*.B. 5

测试.Mouse.Captured!= null