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!
11 Answer
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.