Хорошо, лучше с некоторыми исправлениями и ПРИМЕНЯЕТСЯ ТОЛЬКО К КООРДИНАТЕ X: Учитывая следующий код:
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) When I click on the FIRST time on the Dragged Object,It is moving correctely.
2. (MouseMove) Я перетаскиваю объект в произвольную позицию, например. 100 баллов прямо на моей панели.
3. (MouseLeftButtonUp) Объект правильно позиционируется ГДЕ Я ОСТАВИЛ ЕГО ПЕРЕТАСКИВАНИЕ.
До сих пор НЕТ проблем, но когда я запускаю цепочку событий на ВТОРОЙ РАЗ:
1. (MouseLeftButtonDown) Перетаскиваемый объект сдвигается назад:
CurrentPointerPosition + FIRSTPosition
2. (MouseMove) Перетаскивание выполняется, но указатель мыши находится в CurrentPointerPosition + FIRSTPosition ОТ перетаскиваемого объекта.
3. (MouseLeftButtonUp) выполняется правильно, как в «Первый раз» (но это было очевидно).
Кажется, что на MouseLeftButtonDown MouseDownPosition и положение перетаскиваемого объекта должны быть сброшены ...
Почему? Что я делаю не так? Спасибо!