我在Windows.Forms中使用了SetBounds方法而不是Left,Top,Width,Height属性赋值,因为每次我赋值都会改变location属性 - window会改变它的位置。左,顶部,宽度,高度分配导致窗口移动4次,而SetBounds移动窗口一次(更好的UI体验,没有窗口犹豫)。
当我迁移到WPF时,我发现没有SetBounds方法,看起来我必须逐步改变窗口大小和位置。
在一个窗口移动中更改WPF窗口位置的最佳方法是什么?
答案 0 :(得分:5)
SetBounds
在WPF中不可用,但您可以轻松地P /调用SetWindowPos
API:
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);
Left
,Top
,Width
和Height
依赖项属性将自动更新以反映新界限。