わかりました、いくつかの修正を加えて改善し、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) ドラッグしたオブジェクトを最初にクリックすると、正しく動きます。
2.(MouseMove)オブジェクトを任意の位置にドラッグします。私のパネルで100ポイント。
3.(MouseLeftButtonUp) オブジェクトは、ドラッグしている場所に正しく配置されます。
今のところ問題はありません。しかし、2 回目のイベント チェーンを開始すると、次のようになります。
1.(MouseLeftButtonDown)ドラッグされたオブジェクトが後方に移動します:
CurrentPointerPosition + FIRSTPosition
2. (MouseMove)ドラッグ移動が実行されますが、MousePointer はドラッグされたオブジェクトから CurrentPointerPosition + FIRSTPosition にあります。
3.(MouseLeftButtonUp) は、初回と同様に正しく実行されました (ただし、明らかでした)。
MouseLeftButtonDown では、MouseDownPosition とドラッグされたオブジェクトの位置をリセットする必要があるようです...
なんで?私が間違っていることは何ですか?ありがとう!