1

我有一个设置了 MaxWidth 的 WPF 窗口,所以当我点击最大化按钮时,它会垂直最大化,但不会水平最大化。这是预期的行为。但是,窗口始终停靠在屏幕的左侧(Windows 7,如果这很重要),我希望它在最大化时水平居中。我尝试添加以下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设置后,窗口仍然牢固地粘在屏幕的左侧。这是怎么回事?

4

3 回答 3

0

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

于 2010-09-27T18:00:25.093 回答
0

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

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

于 2010-09-27T17:48:50.890 回答
0

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

   var windowWidth = this.ActualWidth;

注意:这是在 XP SP3 上测试的——我现在没有可用的 Win7 机器。

抱歉 - 当 WindowState 最大化时,其行为与 Win7 相同。也许最好的办法是捕捉 WindowState 何时更改为 Maximized,而不是实际设置 WindowState,而是在 Normal 模式下设置窗口的大小和位置。

于 2010-09-27T17:51:08.620 回答