在使 window 从折叠中可见后,WPF Window 在所有其他 windows 下

WPF Window under all other windows after making window visible from being collapsed

我的 WPF window 遇到了一些非常令人沮丧的问题。我想要的设计是:

当用户最小化 window 时,它将最小化为系统托盘图标(隐藏 window 和开始栏上的图标)。当用户右键单击该图标时,将显示一个包含选项的上下文菜单,其中一个将显示打开,这将打开该应用程序(再次显示 window / 取消隐藏 window agian)。用户也可以双击该图标。

很简单吧?

我最小化到任务栏没有问题,我只是在 window 的关闭事件上执行以下操作:

e.Cancel = true;
this.Visibility = Visibility.Collapsed;

但是,我在正确恢复 window 时遇到问题。我只是在上下文菜单单击或图标双击事件上执行此操作:

this.Visibility = Visibility.Visible;
this.Activate();

问题是 window 再次出现在开始栏及其图标上,但它位于用户打开的每个 window 后面。我想要它,所以当用户打开 window 时,它将成为最顶层的 window。我并不总是希望它成为最上面的,只是当他们想让它再次可见时。

我尝试了很多方法,比如将 window 上的 show activate 设置为 true,使其可见后等待一秒钟,然后激活 window,激活 window 多个次(工作了几次,但可能是 10 次尝试中的 1 次),等等。

我不认为显示/隐藏 window 会这么烦人,我也不确定我做错了什么。

感谢任何帮助,谢谢。

发了才知道,应用程序先最小化再隐藏。当我显示 window 时,它显示为最小化。

知道这个问题后,我解决了这个问题。这可能会帮助其他决定在最小化后隐藏 window 的人。

编辑 这是我用来隐藏 window 的代码(这是在事件触发后状态更改 [最小化]):

Application.Current.MainWindow.Visibility = Visibility.Collapsed;
Application.Current.MainWindow.WindowState = WindowState.Normal;

您会注意到我将 window 状态隐藏后恢复正常。即使 window 被隐藏且未被渲染,它也会在内存中恢复 window 位置/大小。

然后当我想再次看到 window 时,我就这样做:

Application.Current.MainWindow.Visibility = Visibility.Visible;

这会显示 window 就好了!

希望这对外面的人有帮助!