Wpf并非所有窗口都从任务栏最大化

时间:2014-08-22 06:27:37

标签: wpf window owner

我有三个窗户。 FirstWindowSecondWindowThirdWindowFirstWindow有按钮,点击此按钮即可打开SecondWindow。类似地,SecondWindow有按钮,单击此按钮可打开ThirdWindowOwner的{​​{1}}属性设置为SecondWindowFirstWindow的{​​{1}}属性设置为Owner。该方案描述了问题:

连续打开所有窗口。它看起来像这样:

enter image description here

然后点击ThirdWindow右上角的相应图标,最小化所有窗口。 如果您尝试通过单击任务栏中的SecondWindowThirdWindow来最大化所有窗口 - 一切都会好的,三个窗口将最大化。但是如果你点击FirstLevelWindow,你会看到:

enter image description here

我该如何解决它,或者只是ThirdLevelWinow错误?如果它有帮助,我可以提供存档的expample项目。

更新

最小化窗口 - 点击" _"图标,窗口的图标栏中的左图标。所有窗口都是模态的,即使用SecondWindow方法打开,而不是使用WPF方法打开。因此,如果您最小化第三个窗口 - 所有窗口都将被最小化。

此处代码,如果您不想通过链接下载项目:

ShowDialog() XAML:

Show()

FirstWindow .cs:

<Button Click="OpenChildWindow" 
        Content="ChildWindow"/>

FirstWindow XAML:

private void OpenChildWindow(Object sender, RoutedEventArgs e)
{
    var window = new SecondLevelWindow();
    window.Owner = this;
    window.ShowDialog();
}

SecondWindow .cs:

<Button Click="OpenChildWindow" 
        Content="ChildWindow"/>

SecondWindow是空窗口,没有任何内容。

此处 link示例项目

我刚刚发现,如果private void OpenChildWindow(Object sender, RoutedEventArgs e) { var window = new ThirdLevelWindow(); window.Owner = this; window.ShowDialog(); } 的属性ThirdWindow设置为&#34; NoResize&#34;,则不会再现该错误。这将是有用的信息。

1 个答案:

答案 0 :(得分:2)

好吧,我承认我不知道发生了什么。你试图添加第四个窗口吗?这变得更加陌生:第二个窗口带回第三个,但第四个仍然没有回来。

无论如何,如果我必须管理这个问题,我会在每个父窗口中保留我的childWindow的引用。这种方式对任何有趣的事件(例如在你的例子中的第二个窗口上激活)我可以根据需要管理我孩子的状态(在你的情况下为WindowState.Normal)。

可能是这样的:在第二个窗口的xaml中:

Activated="SecondLevelWindow_OnActivated"

然后在代码背后:

        private ThirdLevelWindow _window;

        public SecondLevelWindow()
        {
            InitializeComponent();
        }

        private void OpenChildWindow(Object sender, RoutedEventArgs e)
        {
            _window = new ThirdLevelWindow ();
            _window.Owner = this;
            _window.ShowDialog();
        }

        public void SecondLevelWindow_OnActivated(object sender, EventArgs e)
        {
            if (_window != null)
            {
                _window.WindowState = WindowState.Normal;
            }
        }

这是一个开始,但您也可以检查当前状态以定义您孩子的状态。

希望它有所帮助。