Reputation: 5513
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
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