Dưới đây là một số mã đơn giản để kéo các hình thức WPF xung quanh màn hình của bạn. Bạn có thể đã thấy một số mã này trên các bài đăng khác nhau, tôi vừa sửa đổi nó để phù hợp với nhu cầu kéo biểu mẫu WPF.
Hãy nhớ rằng chúng ta cần lấy vị trí biểu mẫu trên MouseLeftButtonDown, vì vậy chúng tôi có thể giữ con trỏ chuột được định vị trong cùng một vị trí trên biểu mẫu khi chúng tôi kéo nó xung quanh màn hình.
Bạn cũng sẽ cần phải thêm tài liệu tham khảo sau đây để có được vị trí chuột tương đối so với màn hình: System.Windows.Forms
Thuộc tính cần thiết:
private bool _IsDragInProgress { get; set; }
private System.Windows.Point _FormMousePosition {get;set;}
Code:
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);
}
Cảm ơn rất nhiều, tôi đã chỉ tìm kiếm 2 ngày cho một câu trả lời như vậy :) –