gpt4 book ai didi

c# - 为什么关闭最后一个子窗口会最小化其父窗口?

转载 作者:可可西里 更新时间:2023-11-01 03:00:14 25 4
gpt4 key购买 nike

我有以下简单的 wpf 应用程序:

应用程序.xaml:

<Application x:Class="TestWpf2.App"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
</Application>

App.xaml.cs:

public partial class App : Application
{
protected override void OnStartup(StartupEventArgs e)
{
var parentWindow = new Window();
parentWindow.Show();

var childWindow1 = new Window { Owner = parentWindow };
childWindow1.Show();

var childWindow2 = new Window { Owner = parentWindow };
childWindow2.Show();
}
}

应用程序导致屏幕上出现 3 个窗口。如果您运行该应用程序并关闭两个子窗口,父窗口将最小化到任务栏。如果注释掉 childWindow2.show(),运行应用程序并关闭单个子窗口,则父窗口不会最小化到任务栏。

我可以添加以下代码来解决这个问题:

childWindow1.Closing += delegate(object sender, CancelEventArgs ex)
{
(sender as Window).Owner = null;
};

但我不想使用这样的 hack,我想了解为什么会出现此问题。

为什么会这样?

最佳答案

这是一个 WPF 未记录的功能(错误)

此错误已在 7 年多前报告给 Microsoft。

Modal dialog on top of non-modal window sends main window to back.

The WPF team has recently reviewed this issue and will not be addressing this issue as at this time the team is focusing on the bugs impacting the highest number of WPF developers.

让我们稍微看一下这个未记录的功能的行为。

它不会最小化,只是在后面一个窗口(在 Debug模式下,在 visual studio 窗口后面)

证明步骤:

  • 运行此应用程序。

  • 最小化所有其他窗口(例如:visual studio 和所有其他窗口)。在屏幕上只保留这三个窗口。

  • 关闭两个 child , parent 仍处于正常状态

测试此代码以进一步证明:StateChange 不会触发。

        protected override void OnStartup(StartupEventArgs e)
{
var parentWindow = new Window() { Title = "Parent" };
parentWindow.StateChanged += (sender, ep)=>
{
var state = ((Window)sender).WindowState;
};
parentWindow.Show();

var childWindow1 = new Window { Owner = parentWindow, Title = "Child1" };
childWindow1.Show();

var childWindow2 = new Window { Owner = parentWindow, Title = "Child2" };
childWindow2.Show();
}

成为 TopMost 可以防止这种情况发生

如果父窗口是 TopMost,则不会发生这种情况。但在许多情况下,这可能不是一种选择。

parentWindow.Topmost = true;

解决方法

在 child2 关闭时激活父级。

childWindow2.Closed += (a, b) => { parentWindow.Activate(); };

关于c# - 为什么关闭最后一个子窗口会最小化其父窗口?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10757625/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com