使用鼠标移动具有自定义边框的窗口

本文关键字:自定义 边框 窗口 鼠标 移动 | 更新日期: 2023-09-27 17:57:07

我正在使用WPF处理一个C#项目。在我的 MainWindow 中,我刚刚摆脱了默认的窗口边框,并使用 png 文件制作了自己的边框。我只是将其设置为主窗口的背景。现在我做了一些有点棘手的方法来让我的窗口移动:

private void Window_MouseDown(object sender, MouseButtonEventArgs e) {
        mouseDown = true;
        lastX = (int)e.GetPosition(this).X;
        lastY = (int)e.GetPosition(this).Y;
    }
    private void Window_MouseUp(object sender, MouseButtonEventArgs e) {
        mouseDown = false;
    }
    private void Window_MouseMove(object sender, MouseEventArgs e) {
        if (mouseDown) {
            int xDiff = (int)e.GetPosition(this).X - lastX;
            int yDiff = (int)e.GetPosition(this).Y - lastY;
            this.Left += xDiff;
            this.Top += yDiff;
        }
    }
    private void Window_MouseLeave(object sender, MouseEventArgs e) {
        mouseDown = false;
    }

现在这并不能真正正常工作。这样,用户可以在所有空白处移动窗口,即使在标签和文本块上也是如此。有没有办法给这类事件的背景或边界?还是有更好的方法来整合边界?

提前感谢!

使用鼠标移动具有自定义边框的窗口

正如您所说,手动完成时行为不稳定,但有一个解决方法。

这是框架中专门用于执行此操作的方法:

http://msdn.microsoft.com/en-us/library/system.windows.window.dragmove(v=vs.110).aspx