Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

IsMouseCaptured turns to False

I'm implementing a simple Drag'n'Drop Bahevior. First I'm subscribing for Mouse Events:

    protected override void OnAttached()
    {
        base.OnAttached();
        base.AssociatedObject.PreviewMouseLeftButtonDown += this.AssociatedObject_PreviewMouseLeftButtonDown;
        base.AssociatedObject.PreviewMouseLeftButtonUp += this.AssociatedObject_PreviewMouseLeftButtonUp;
        base.AssociatedObject.PreviewMouseMove += this.AssociatedObject_PreviewMouseMove;
    }

Then I'm capturing the Mouse:

    private void AssociatedObject_PreviewMouseLeftButtonDown(object sender, MouseButtonEventArgs e)
    {
        this.startPoint = e.GetPosition(base.AssociatedObject);
        base.AssociatedObject.CaptureMouse();
    }

And handle mouse Movement:

private void AssociatedObject_PreviewMouseMove(object sender, MouseEventArgs e)
{
    if (base.AssociatedObject.IsMouseCaptured)
    {
       ...
    }
}

When this Method is entered right after the Mouse Button is pressed, IsMouseCaptured is true. But when it is entered after it IsMouseCaptured is always false. What am I doing wrong?

Thanks in advance!

like image 757
Waldemar Avatar asked Feb 15 '26 23:02

Waldemar


1 Answers

Thanks to Hans Passant I've updated the Code like this:

    /// <summary>
    /// Handles pressing Mouse Button over the Control.
    /// </summary>
    private void AssociatedObject_PreviewMouseLeftButtonDown(object sender, MouseButtonEventArgs e)
    {
        this.startPoint = e.GetPosition(base.AssociatedObject);
        base.AssociatedObject.CaptureMouse();
        e.Handled = true;
    }

Marking that Event as handled helps to capture the Mouse while dragging.

like image 176
Waldemar Avatar answered Feb 18 '26 12:02

Waldemar



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!