2011-01-07 118 views
2

我在Windows.Forms中使用了SetBounds方法,而不是Left,Top,Width,Height屬性賦值,因爲每次我賦值都改變了位置屬性 - 窗口改變了它的位置。左,頂部,寬度,高度分配導致窗口移動4次,而SetBounds移動窗口一次(更好的UI體驗,沒有窗口猶豫)。WPF:窗口SetBounds

當我遷移到WPF時,我發現沒有SetBounds方法,它看起來像我必須一步一步地改變窗口大小和位置。

在一個窗口移動中更改WPF窗口位置的最佳方法是什麼?

回答

5

SetBounds不WPF,但您可以很容易P /調用API SetWindowPos

private IntPtr _handle; 
    private void SetBounds(int left, int top, int width, int height) 
    { 
     if (_handle == IntPtr.Zero) 
      _handle = new WindowInteropHelper(this).Handle; 

     SetWindowPos(_handle, IntPtr.Zero, left, top, width, height, 0); 
    } 

    [DllImport("user32")] 
    static extern bool SetWindowPos(
     IntPtr hWnd, 
     IntPtr hWndInsertAfter, 
     int x, 
     int y, 
     int cx, 
     int cy, 
     uint uFlags); 

LeftTopWidthHeight依賴屬性會自動更新以反映新的邊界。

+3

謝謝@Thomas!這太奇怪了,WPF父親拋出了SetBounds方法。對我來說,幾乎令人難以置信的是,我們不得不將骯髒的黑客應用到這樣一個不錯的技術上,這個技術是爲了從Windows窗口小部件中抽象出來的。 – 2011-01-07 21:16:31