在WPF中拖动少板窗口 - 如何有效地做到这一点?

时间:2011-04-30 18:48:48

标签: wpf drag

这是我必须拖动窗口的代码。它有点工作!有点......

Private Point startPoint;

private void Window_PreviewMouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{

    startPoint = e.GetPosition(null);
}
private void Window_MouseMove(object sender, MouseEventArgs e)
{
    if (e.LeftButton == MouseButtonState.Pressed)
    {
        Point relative = e.GetPosition(null);
        Point AbsolutePos = new Point(relative.X + this.Left, relative.Y + this.Top);
        this.Top = AbsolutePos.Y - startPoint.Y;
        this.Left = AbsolutePos.X - startPoint.X;
    }
}

问题是如果我移动鼠标太快,它会离开窗口并停止提升movemouse事件。其次,拖动窗口根本不平滑,这让我觉得我没有以正确的方式做到这一点。第三,我在Window_MouseLeftButtonDown上尝试了这个,它会在每次点击鼠标时触发一次事件。 我是初学者,一个简单的例子,没有Dropping和数据传输,我和其他很多像我这样的初学者都会感激。感谢Stack OverFlow用户愿意提供帮助。

2 个答案:

答案 0 :(得分:2)

解决方案实际上比您想象的要简单。放置这一行

MouseDown += delegate { DragMove(); };

在你的构造函数中,你很高兴:)

答案 1 :(得分:0)

丢失鼠标是因为未能捕获鼠标。标准程序是:

    鼠标按下事件中的
  • capture the mouse并记录鼠标位置
  • 如果按下按钮,则在鼠标移动事件中处理鼠标移动
  • 鼠标向上事件中的
  • release the mouse capture并执行任何最终处理

就性能而言,你是以正确的方式进行的。速度受限于窗口本身的重新绘制以及窗口经过的任何窗口以及计算机的速度以及拖动计算机时计算机上发生的其他情况。