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

时间:2014-04-07 19:36:49

标签: c# wpf window mousemove

我正在使用WPF进行C#项目。在我的MainWindow中,我刚刚摆脱了默认的窗口边框,而是用png文件创建了自己的边框。我只是将它设置为MainWindow的背景。 现在我做了一些有点难以让我的窗户移动的方法:

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;
    }

现在这不能正常工作。这样,用户可以在所有空白处移动窗口,甚至可以在Labels和TextBlocks上移动窗口。有没有办法给背景或边界这些事件?或者有更好的方法来整合边界吗?

提前致谢!

1 个答案:

答案 0 :(得分:0)

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

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

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