【问题标题】:WPF: Window SetBoundsWPF:窗口设置边界
【发布时间】:2011-06-05 11:01:46
【问题描述】:

我在 Windows.Forms 中使用 SetBounds 方法而不是 Left、Top、Width、Height 属性分配,因为每次我分配的值都会改变位置属性 - 窗口会改变它的位置。 Left,Top,Width,Height 赋值导致窗口移动 4 次,而 SetBounds 移动窗口一次(更好的 UI 体验,没有窗口犹豫)。

当我迁移到 WPF 时,我发现没有 SetBounds 方法,看起来我必须逐步更改窗口大小和位置。

在一个窗口移动中更改 WPF 窗口位置的最佳方法是什么?

【问题讨论】:

    标签: wpf


    【解决方案1】:

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

    LeftTopWidthHeight 依赖属性将自动更新以反映新的边界。

    【讨论】:

    • 谢谢你,@Thomas!奇怪的是,WPF 之父抛出了 SetBounds 方法。对我来说几乎难以置信的是,我们不得不对如此好的技术应用肮脏的黑客攻击,开发用于将我们从 Windows 小部件中抽象出来。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-27
    • 2019-08-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多