代码之家  ›  专栏  ›  技术社区  ›  Sarah Vessels

水平居中垂直最大化WPF窗口

  •  1
  • Sarah Vessels  · 技术社区  · 14 年前

    我有一个WPF窗口,它设置了MaxWidth,所以当我点击Maximize按钮时,它垂直最大化,而不是水平最大化。这是预期的行为。但是,窗口总是停靠在屏幕的左侧(Windows7,如果这很重要的话),我希望它在最大化时水平居中。我试着添加以下内容 StateChanged 事件处理程序,但它似乎什么也没做:

    private void wdw_mainWindow_StateChanged(object sender, EventArgs e)
    {
        switch (WindowState)
        {
            case WindowState.Maximized:
                var windowWidth = (double)GetValue(WidthProperty);
                Left = (SystemParameters.PrimaryScreenWidth / 2) - (windowWidth / 2);
                break;
        }
    }
    

    我在 switch 语句和此代码在我点击应用程序中的最大化按钮时肯定会被命中。然而,即使在 Left 设置好后,窗口仍牢牢地卡在屏幕的左侧。发生什么事?

    3 回复  |  直到 14 年前
        1
  •  0
  •   Brad Cunningham    14 年前

    Windows 7上的Aero管理单元可能会干扰您将窗口居中的尝试。尝试关闭Aero Snap,看看你是否还有问题。

    http://www.sevenforums.com/tutorials/3069-aero-snap-turn-off.html

        2
  •  0
  •   Wonko the Sane    14 年前

    将windowWidth调用(将返回NaN)更改为:

       var windowWidth = this.ActualWidth;
    


    抱歉-在最大化WindowsState时具有与Win7相同的行为。也许最好的做法是在窗口状态更改为最大化时捕获,而不是实际设置窗口状态,而是在正常模式下设置窗口的大小和位置。

        3
  •  0
  •   Chen Kinnrot    14 年前

    注册到位置也发生了变化,当两个事件都发生时,执行逻辑,它就完成了。