Вот несколько упрощенных кодов для перетаскивания формы WPF по экрану. Возможно, вы видели этот код на разных постах, я просто изменил его, чтобы он соответствовал потребностям перетаскивания формы WPF.
Имейте в виду, что нам нужно захватить положение формы на MouseLeftButtonDown, чтобы мы могли удерживать указатель мыши в том же месте на форме, когда мы перетаскиваем его по экрану.
Вам также потребуется добавить следующую ссылку, чтобы получить положение мыши относительно экрана: System.Windows.Forms
Свойства, необходимые:
private bool _IsDragInProgress { get; set; }
private System.Windows.Point _FormMousePosition {get;set;}
Код:
protected override void OnMouseLeftButtonDown(MouseButtonEventArgs e)
{
this._IsDragInProgress = true;
this.CaptureMouse();
this._FormMousePosition = e.GetPosition((UIElement)this);
base.OnMouseLeftButtonDown(e);
}
protected override void OnMouseMove(MouseEventArgs e)
{
if (!this._IsDragInProgress)
return;
System.Drawing.Point screenPos = (System.Drawing.Point)System.Windows.Forms.Cursor.Position;
double top = (double)screenPos.Y - (double)this._FormMousePosition.Y;
double left = (double)screenPos.X - (double)this._FormMousePosition.X;
this.SetValue(MainWindow.TopProperty, top);
this.SetValue(MainWindow.LeftProperty, left);
base.OnMouseMove(e);
}
protected override void OnMouseLeftButtonUp(MouseButtonEventArgs e)
{
this._IsDragInProgress = false;
this.ReleaseMouseCapture();
base.OnMouseLeftButtonUp(e);
}