2011-04-30 66 views
2

這就是我必須拖動窗口的代碼。它有點有用!那種......在WPF中拖動板少窗口 - 如何有效地做到這一點?

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上試過這個,每次點擊鼠標就會觸發一次事件。 我是一個初學者,一個簡單的例子是免費的滴和數據傳輸將受到我和許多像我這樣的初學者的讚賞。在此先感謝Stack OverFlow用戶願意提供幫助。

回答

0

失去鼠標是未能捕獲鼠標的結果。標準程序是:

就性能而言,您正在以正確的方式去做。速度受限於窗口本身的重新繪製以及窗口經過的任何窗口以及計算機的速度,以及在拖動計算機時計算機上發生了什麼。

+0

好像WPF是相當沉重的技術,記事本拖動,它會順利但這WPF窗口筆觸一點。我已經嘗試過Eugen的回答,那條單線產生了奇蹟,取代了我在幾小時後得到的所有代碼,以得到我得到的結果。窗口仍然像我的代碼一樣彈開,但我不會再鬆開指針。 – user722886 2011-04-30 22:28:29

+0

感謝您的指引,我會再試一次,看看我是否可以自行創建高效的代碼。非常感謝。 – user722886 2011-04-30 22:30:59

2

解決方案實際上比您想象的要簡單。將這一行

MouseDown += delegate { DragMove(); }; 
在構造函數

,你是好去:)

+0

謝謝歐根,coudn't找不到這個美麗的線路沒有谷歌地方,工作得很好,但窗口仍然輕彈,它必須是我的電腦性能,當交易是WPF。 – user722886 2011-04-30 22:34:06

+0

它應該是你的顯卡,它在我身上移動得非常順暢。我有一個nVidia GTX 570。 – Eugen 2011-04-30 22:47:08