繁体   English   中英

WPF不是所有窗口都从任务栏最大化

[英]Wpf not all windows are maximized from taskbar

我有三个窗户。 FirstWindowSecondWindowThirdWindow FirstWindow有一个按钮,单击此按钮可打开SecondWindow 类似地, SecondWindow具有按钮,单击此按钮可打开ThirdWindow Owner的财产SecondWindow如设置FirstWindowOwner的财产ThirdWindow设置为SecondWindow 场景描述问题:

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

在此处输入图片说明

然后通过单击ThirdWindow右上角的相应图标最小化所有窗口。 如果您尝试通过在任务栏中单击FirstLevelWindowThirdLevelWinow来最大化所有窗口,则一切都将正常,将最大化三个窗口。 但是,如果您单击SecondWindow您将看到以下内容:

在此处输入图片说明

我该如何解决,还是WPF错误? 如果有帮助,我可以提供存档的示例项目。

UPDATE

最小化窗口-单击“ _”图标,在窗口图标栏中向左图标。 所有窗口都是模态的,即,它使用ShowDialog()方法而不是Show()方法打开。 因此,如果最小化第三个窗口-所有窗口将被最小化。

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

FirstWindow XAML:

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

FirstWindow .cs:

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

SecondWindow XAML:

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

SecondWindow .cs:

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

ThirdWindow是没有任何内容的空窗口。

这里 链接到示例项目

我刚刚发现,如果将ResizeModeThirdWindow属性设置为“ NoResize”,则不会重现该错误。 MB这将是有用的信息。

好吧,我承认我不知道发生了什么。 您是否尝试添加第四个窗口? 这变得更加奇怪:第二个窗口带回了第三个窗口,但第四个窗口仍然没有返回。

无论如何,如果我必须解决这个问题,我将在每个父窗口中保留我的childWindow的引用。 这样,在发生任何有趣的事件时(例如在示例中的第二个窗口上激活),我都可以根据需要管理孩子的状态(在您的情况下为WindowState.Normal )。

可能是这样的:在secondWindow的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;
            }
        }

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

希望能帮助到你。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM