无法更改隐藏和显示之间的窗口大小和位置

时间:2015-07-31 16:56:13

标签: wpf resize window flicker sizetocontent

在我的场景中,我有一个窗口,我想用它以两种不同的方式显示。窗口具有WindowState = WindowState.Normal;的另一种方式,窗口具有正常或最大化状态的另一种方式。 我想保存这两种窗口模式的大小和位置,这样对于用户来说它看起来就像是两个独立的窗口。

我有两个不同的问题。

1)当我在调用Show()之后初始化窗口时,有一个小的闪烁,在较慢的机器上没有这么短的闪烁。为了解决这个问题,我想设置窗口,同时隐藏它:

            ((SecondWindowViewModel)this.DataContext).LoadWindowPosition(mode);
            this.Show();

如果我这样做,就会出现一个更糟糕的问题

2)在这种情况下,处于正常模式的窗口1在最大化模式下关闭窗口2后,在拖动时设置了一些随机高度。

我已经创建了一个示例应用程序,你可以找到here,在那里你可以看到确切的问题,我也写下了重现的步骤。

修改

实施了Maxims更改并删除了不必要的引用

1 个答案:

答案 0 :(得分:0)

Haven't had yet the time to completely solve your issue, but one issue you have in your code is that you do not set the window state accordingly to your mode. In SecondWindow.xaml.cs, your code should look like this:

        if (mode == WindowViewMode.Normal)
        {
            WindowState = WindowState.Normal;
        }
        else
        {
            WindowState = WindowState.Maximized;
        }

        if (this.IsVisible)
        {
            this.Hide();
        }
        else
        {
            ((SecondWindowViewModel)this.DataContext).LoadWindowPosition(mode);
            this.Show();

        }

Still need to take a look at the problems your LoadWindowPosition is causing.