WPF 中的可移动用户控件

本文关键字:移动用户控件 WPF | 更新日期: 2023-09-27 18:30:55

我创建了带有多个标签的简单UserControl。我如何实现简单的机制,允许像普通窗口一样移动整个控件(当我将其添加到 winForms 时 - 如果它有区别)

WPF 中的可移动用户控件

您可以使用我的 Capture 类:

public class ClsCapture
{
    bool bCaptureMe;
    Point pLocation = new Point();
    Control dd;
    //Handles dad.MouseDown, dd.MouseDown
    private void Form1_MouseDown(object sender, System.Windows.Input.MouseButtonEventArgs e)
    {
        try {
            bCaptureMe = true;
            pLocation = e.GetPosition(sender);
        } catch {
        }
    }
    //Handles dad.MouseMove, dd.MouseMove
    private void Form1_MouseMove(object sender, System.Windows.Input.MouseEventArgs e)
    {
        try {
            if (bCaptureMe) {
                dd.Margin = new Thickness(dd.Margin.Left - pLocation.X + e.GetPosition(sender).X, dd.Margin.Top - pLocation.Y + e.GetPosition(sender).Y, dd.Margin.Right, dd.Margin.Bottom);
            }
        } catch {
        }
    }
    //Handles dad.MouseUp, dd.MouseUp
    private void Form1_MouseUp(object sender, System.Windows.Input.MouseButtonEventArgs e)
    {
        try {
            bCaptureMe = false;
        } catch {
        }
    }
    public ClsCapture(Control pnl)
    {
        dd = pnl;
        dd.PreviewMouseLeftButtonDown += Form1_MouseDown;
        dd.PreviewMouseLeftButtonUp += Form1_MouseUp;
        dd.PreviewMouseMove += Form1_MouseMove;
    }
    public static void CaptureMe(Control pnl)
    {
        ClsCapture cc = new ClsCapture(pnl);
    }
}

用法:

ClsCapture.CaptureMe(AnyControlYouWant);