Хорошо, лучше с некоторыми исправлениями и применяется ТОЛЬКО к Х КООРДИНАТЕ:
Учитывая следующий код:
private Point MouseDownPosition;
private void OnStartDrag(object sender, MouseButtonEventArgs e)
{
if (!this.AssociatedObject.IsMouseCaptured)
{
this.AssociatedObject.AddHandler(FrameworkElement.MouseMoveEvent, new MouseEventHandler(this.OnDrag));
this.AssociatedObject.RenderTransform = new TranslateTransform();
this.MouseDownPosition = Mouse.GetPosition(null);
Mouse.Capture(this.AssociatedObject, CaptureMode.Element);
}
}
private void OnDrag(object sender, MouseEventArgs e)
{
if (this.AssociatedObject.IsMouseCaptured)
{
this.AssociatedObject.AddHandler(FrameworkElement.MouseLeftButtonUpEvent, new MouseButtonEventHandler(this.OnStopDrag));
TranslateTransform Translate = this.AssociatedObject.RenderTransform as TranslateTransform;
Point CurrentPosition = Mouse.GetPosition(null);
Translate.X = CurrentPosition.X - this.MouseDownPosition.X;
}
}
private void OnStopDrag(object sender, MouseButtonEventArgs e)
{
if (this.AssociatedObject.IsMouseCaptured)
{
this.AssociatedObject.ReleaseMouseCapture();
this.AssociatedObject.RemoveHandler(FrameworkElement.MouseMoveEvent, new MouseEventHandler(this.OnDrag));
this.AssociatedObject.RemoveHandler(FrameworkElement.MouseLeftButtonUpEvent, new MouseButtonEventHandler(this.OnStopDrag));
}
}
1. (MouseLeftButtonDown) Когда я нажимаю ПЕРВОЕ время на перетаскиваемом объекте, он движется правильно.
2. (MouseMove) Я перетаскиваю объект в произвольную позицию, напр. 100 очков прямо на моей панели.
3. (MouseLeftButtonUp) Объект расположен правильно, ГДЕ Я ОСТАВИЛ ЭТО ТЯНУТЬ.
До сих пор никаких проблем. Но когда я запускаю цепочку событий для ВТОРОГО ВРЕМЕНИ:
1. (MouseLeftButtonDown) Перетаскиваемый объект смещен Назад на:
CurrentPointerPosition + FIRSTPosition
2. (MouseMove) Перетаскивание выполняется, но MousePointer находится в CurrentPointerPosition + FIRSTPosition ОТ перетаскиваемого объекта.
3. (MouseLeftButtonUp) выполняется правильно, как в первый раз (но это было очевидно).
Похоже, что при MouseLeftButtonDown MouseDownPosition и положение перетаскиваемого объекта должны быть сброшены ...
Почему?
Что я делаю не так?
Спасибо!