WPF 解决弹出模态窗口关闭后,主窗口不在最前
Posted lindexi_gd
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了WPF 解决弹出模态窗口关闭后,主窗口不在最前相关的知识,希望对你有一定的参考价值。
本文告诉大家如何解决这个问题,在 WPF 的软件,弹出一个模态窗口。使用另一个窗口在模态窗口前面。从任务栏打开模态窗口。关闭模态窗口。这时发现,主窗口会在刚才使用的另一个窗口下面
这是 Windows 的bug ,不过从上面的描述,也许大家还不知道这个问题是什么。不过我把他放在 github ,所以大家可以看到这个问题具体是什么。
可以运行代码:wpf-issues/ChildWindows
在上面的网站有详细的视频告诉大家是如何做的就可以看到这个问题。
因为模态窗口会在关闭的时候,让主窗口不在最前,所以团队不敢使用模态窗口。
但是这个问题在看了 Windows 历史之后,才发现这个问题是 Windows 的问题。在窗口关闭的时候,Windows 会找一个在这个窗口下方的第一个可用的窗口,激活他。因为弹出模态窗口的主窗口是被禁用的。所以在模态窗口关闭的时候,就忽略了主窗口可以激活,于是找到主窗口下方的一个可以被激活的窗口,这时激活他,于是这个被找到的窗口就在主窗口的上面。
那么这个问题可以如何解决?实际上只需要在模态窗口关闭之前,激活主窗口就可以。请看下面的代码
private void ButtonBase_OnClick(object sender, RoutedEventArgs e)
var w = new Window
Title = "ChildWindow",
Owner = this,
Width = 600,
Height = 500,
Content = "Step 1: Move a window of another appliation to over the MainWindow\\r\\n" +
"Step 2: Active this window from the Windows taskbar\\r\\n" +
"Step 3: Close this window (ChildWindow)\\r\\n" +
"\\r\\nNow you can see that the MainWindow drops down and coverd by another window.\\r\\n" +
"If you don't understand the description above, please refer to the video demo in this project."
;
w.Closing += W_Closed;
w.Show();
private void W_Closed(object sender, CancelEventArgs e)
Activate();
解决的项目我传到 CSDN,可以直接运行。
我搭建了自己的博客 https://blog.lindexi.com/ 欢迎大家访问,里面有很多新的博客。只有在我看到博客写成熟之后才会放在csdn或博客园,但是一旦发布了就不再更新
如果在博客看到有任何不懂的,欢迎交流,我搭建了 dotnet 职业技术学院 欢迎大家加入
本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。欢迎转载、使用、重新发布,但务必保留文章署名林德熙(包含链接:http://blog.csdn.net/lindexi_gd ),不得用于商业目的,基于本文修改后的作品务必以相同的许可发布。如有任何疑问,请与我联系。
以上是关于WPF 解决弹出模态窗口关闭后,主窗口不在最前的主要内容,如果未能解决你的问题,请参考以下文章