Waldemar
Waldemar

Reputation: 5513

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!

Upvotes: 3

Views: 1525

Answers (1)

Waldemar
Waldemar

Reputation: 5513

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.

Upvotes: 3

Related Questions