前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >WPF 解决弹出模态窗口关闭后,主窗口不在最前

WPF 解决弹出模态窗口关闭后,主窗口不在最前

作者头像
林德熙
发布于 2019-03-13 02:03:11
发布于 2019-03-13 02:03:11
5.8K00
代码可运行
举报
文章被收录于专栏:林德熙的博客林德熙的博客
运行总次数:0
代码可运行

本文告诉大家如何解决这个问题,在 WPF 的软件,弹出一个模态窗口。使用另一个窗口在模态窗口前面。从任务栏打开模态窗口。关闭模态窗口。这时发现,主窗口会在刚才使用的另一个窗口下面。

这是 Windows 的bug ,不过从上面的描述,也许大家还不知道这个问题是什么。不过我把他放在 github ,所以大家可以看到这个问题具体是什么。

可以运行代码:wpf-issues/ChildWindows

在上面的网站有详细的视频告诉大家是如何做的就可以看到这个问题。

因为模态窗口会在关闭的时候,让主窗口不在最前,所以团队不敢使用模态窗口。

但是这个问题在看了 Windows 历史之后,才发现这个问题是 Windows 的问题。在窗口关闭的时候,Windows 会找一个在这个窗口下方的第一个可用的窗口,激活他。因为弹出模态窗口的主窗口是被禁用的。所以在模态窗口关闭的时候,就忽略了主窗口可以激活,于是找到主窗口下方的一个可以被激活的窗口,这时激活他,于是这个被找到的窗口就在主窗口的上面。

那么这个问题可以如何解决?实际上只需要在模态窗口关闭之前,激活主窗口就可以。请看下面的代码

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
     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,可以直接运行。

参见 关闭模态窗口后,父窗口居然跑到了其他窗口的后面

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
Windows wpf(下载应用介绍教程)
    对于WPF应用程序,在Visual Studio和Expression Blend中,自定义的窗体均继承System.Windows.Window类。用户通过窗口与 Windows Presentation Foundation (WPF) 独立应用程序进行交互。 窗口的主要用途是承载可视化数据并使用户可以与数据进行交互的内容。独立 WPF 应用程序使用 Window 类来提供它们自己的窗口。在 WPF 中,可以使用代码或 XAML 标记来实现窗口的外观和行为。我们这里定义的窗体也由这两部分组成:
全栈程序员站长
2022/07/28
1.3K0
Windows wpf(下载应用介绍教程)
关闭模态窗口后,父窗口居然跑到了其他窗口的后面
发布于 2018-02-05 05:58 更新于 2018-06-05 02:55
walterlv
2018/09/18
9.8K1
关闭模态窗口后,父窗口居然跑到了其他窗口的后面
【愚公系列】2023年09月 WPF控件专题 Window窗体属性和事件
Windows窗体是Microsoft .NET Framework中提供的一种可视化用户界面(GUI)组件,它提供了一个容器,可以在其中添加其他控件,例如按钮、文本框、标签等,以便用户与应用程序交互。通过向窗体添加控件,并使用事件处理程序来响应用户交互,可以创建功能强大的Windows桌面应用程序。
愚公搬代码
2023/09/18
6030
dotnet 读 WPF 源代码 Popup 的 StaysOpen 为 false 将会吃掉其他窗口的首次激活
在 WPF 中,使用 Popup 控件,可以设置 StaysOpen 属性来控制是否在 Popup 失去焦点时,也就是点击界面空白处,自动收起 Popup 控件。但如果有两个窗口,在设置 Popup 控件的 StaysOpen 属性为 false 那么将会吃掉在点击其他窗口的第一次交互,如鼠标点击或触摸点击时将不会让本进程的其他窗口 Activate 激活
林德熙
2021/12/24
6780
【炫丽】从0开始做一个WPF+Blazor对话小程序
注 要使WPF支持Blazor,.NET版本必须是 6.0 或更高版本,本文所有示例使用的.NET 7.0,版本要求见链接,截图看如下文字:
沙漠尽头的狼
2022/11/08
8.4K0
WPF 在触摸线程等待主线程窗口关闭会让主线程和触摸线程相互等待 原理方法一方法二
本文是记录一个线程相互等待导致主线程无法响应的问题,这个问题是属于一定可以复现的问题,是 WPF 的已知问题。如果遇到这个问题,属于暂时没有方法解决,只能规避。 这个问题的最简单复现步骤是在触摸线程,也就是 StylusInput 线程,等待一个主线程的窗口关闭,此时就会出现主线程卡住的问题
林德熙
2019/03/13
1.2K0
WPF:自动执行"机器人"程序若干注意事项
企业应用中,经常会遇到一些需要定时自动执行的程序来完成某些功能,比如:自动定时从第三方web service取回数据、定时对历史数据进行清理、定时向ftp上传业务数据... 这类程序,我习惯称为“机器人”程序,就象机器一样机械、高效、重复的执行某些任务。通常部署上线后,都是放在服务器上一直开着,不允许轻易被关闭,而且最好要有一个界面,随时可以手动方便控制状态或查看运行情况,一旦发生异常情况,能及时通知管理员(Email或短信之类) 如果是采用WPF技术开发,以下是几个需要注意的地方: 1、无边框窗体(防
菩提树下的杨过
2018/01/24
1.3K0
WPF:自动执行"机器人"程序若干注意事项
【愚公系列】2023年11月 WPF控件专题 Popup控件详解
WPF控件是Windows Presentation Foundation(WPF)中的基本用户界面元素。它们是可视化对象,可以用来创建各种用户界面。WPF控件可以分为两类:原生控件和自定义控件。
愚公搬代码
2023/11/05
1.6K0
【NEW】WPF MVVM 模式下自写自用的窗口样式
SVG是一种图形文件格式,它的英文全称为Scalable Vector Graphics,意思为可缩放的矢量图形。它是基于XML(Extensible Markup Language),由World Wide Web Consortium(W3C)联盟进行开发的。严格来说应该是一种开放标准的矢量图形语言,可让你设计激动人心的、高分辨率的Web图形页面。用户可以直接用代码来描绘图像,可以用任何文字处理工具打开SVG图像,通过改变部分代码来使图像具有交互功能,并可以随时插入到HTML中通过浏览器来观看。
Shunnet
2022/09/01
2.5K0
【NEW】WPF MVVM 模式下自写自用的窗口样式
理解 UWP 视图的概念,让 UWP 应用显示多个窗口(多视图)
发布于 2018-07-27 01:19 更新于 2018-07-29 23:53
walterlv
2018/09/18
1.6K0
理解 UWP 视图的概念,让 UWP 应用显示多个窗口(多视图)
Android窗口管理分析(3):窗口分组及Z-order的确定总结
在Android系统中,窗口是有分组概念的,例如,Activity中弹出的所有PopupWindow会随着Activity的隐藏而隐藏,可以说这些都附属于Actvity的子窗口分组,对于Dialog也同样如此,只不过Dialog与Activity属于同一个分组。之间已经简单介绍了窗口类型划分:应用窗口、子窗口、系统窗口,Activity与Dialog都属于应用窗口,而PopupWindow属于子窗口,Toast、输入法等属于系统窗口。只有应用窗口与系统窗口可以作为父窗口,子窗口不能作为子窗口的父窗口,也就说
看书的小蜗牛
2018/06/29
2.8K0
【QT】:QMainWindow 窗口
Qt 中的菜单栏是通过 QMenuBar 这个类来实现的。一个主窗口最多只有一个菜单栏,位于主窗口顶部、主窗口标题栏下面。
IsLand1314
2025/02/18
3740
【QT】:QMainWindow 窗口
dotnet 读 WPF 源代码笔记 使用 Win32 方法修改窗口的坐标和大小对窗口依赖属性的影响
咱可以使用 Win32 的 SetWindowPos 修改窗口的坐标和大小,此时 WPF 的窗口的 Left 和 Top 和 Width 和 Height 依赖属性也会受到影响,本文将会告诉大家在啥时候会同步更改 WPF 依赖属性的值,而什么时候不会
林德熙
2021/01/12
8610
Silverlight中多个Xaml("场景"? or "窗口"? )之间的切换/调用/弹出/传参数问题小结
silverlight中不存在Flash中的场景,有的只是一个个Xaml文件,你要是愿意,也可以把它看做"场景"或"窗口",刚开始接触sl时,对于多个xaml之间如何切换,调用,传递参数感到很棘手,下面是我总结的几种方法: 1、A.xaml跳转到B.xaml (a)首先需要定义一个公用的接口(interface),如下: using System.Windows; namespace ChildWin.Code {     public interface IContent     {         UI
菩提树下的杨过
2018/01/23
2.1K0
C# WPF MVVM开发框架Caliburn.Micro Screens, Conductors 和 Composition⑦
Actions, Coroutines and Conventions往往最能吸引Caliburn.Micro的注意力,但如果你想让你的UI设计得更好,那么了解屏幕和导体可能是最重要的。如果您想利用合成,这一点尤其重要。杰里米·米勒最近在为艾迪生·韦斯利撰写《呈现模式》一书时,将屏幕、屏幕指挥和屏幕收藏这三个术语编成了法典。虽然这些模式主要通过从特定基类继承ViewModels来在CM中使用,但将它们视为角色而不是视图模型是很重要的。事实上,根据您的体系结构,屏幕可以是用户控件、演示者或视图模型。不过这有点超前了。首先,让我们谈谈这些东西的一般含义。
用户9127601
2022/01/13
2.8K0
C# WPF MVVM开发框架Caliburn.Micro Screens, Conductors 和 Composition⑦
如何使用WPF用户界面框架编译EasyPlayPro-Win版本网页无插件视频播放器?
WPF提供了统一的编程模型、语言和框架,同时也提供了全新的多媒体交互用户图形界面,对研发人员来说,它最终将减少提供最佳用户体验和通信逻辑所需的代码行数。
TSINGSEE青犀视频
2021/03/02
7080
WPF TreeGrid MVVM 模式下自定义表格带展开缩放效果,并且可以获取点击行的数据
MVVM其实就是:Model 、View、ViewModel三个的简称,就像MVC一样。 Model就是模型。View就是视图。ViewModel就是和view进行绑定的。
Shunnet
2022/05/31
6.2K0
WPF TreeGrid MVVM 模式下自定义表格带展开缩放效果,并且可以获取点击行的数据
WPF 多指触摸拖拽窗口 拖动修改窗口坐标
在 WPF 中,如果是鼠标点击拖动窗口坐标,可以调用 Window 的 DragMove 方法,但是如果是触摸,就需要自己调用 Win32 的方法实现
林德熙
2020/12/01
2.3K0
WPF 窗口和控件的 Unloaded 事件什么情况下不会触发
WPF 中如果监听窗口或者控件的的 Unloaded 事件,那么这个事件会触发吗?答案是不确定的。
walterlv
2023/10/22
5990
【C#】分享一个弹出容器层,像右键菜单那样召即来挥则去
------------------201508261813更新(源码有更新、Demo未更新)------------------
AhDung
2018/09/13
2.9K0
【C#】分享一个弹出容器层,像右键菜单那样召即来挥则去
推荐阅读
Windows wpf(下载应用介绍教程)
1.3K0
关闭模态窗口后,父窗口居然跑到了其他窗口的后面
9.8K1
【愚公系列】2023年09月 WPF控件专题 Window窗体属性和事件
6030
dotnet 读 WPF 源代码 Popup 的 StaysOpen 为 false 将会吃掉其他窗口的首次激活
6780
【炫丽】从0开始做一个WPF+Blazor对话小程序
8.4K0
WPF 在触摸线程等待主线程窗口关闭会让主线程和触摸线程相互等待 原理方法一方法二
1.2K0
WPF:自动执行"机器人"程序若干注意事项
1.3K0
【愚公系列】2023年11月 WPF控件专题 Popup控件详解
1.6K0
【NEW】WPF MVVM 模式下自写自用的窗口样式
2.5K0
理解 UWP 视图的概念,让 UWP 应用显示多个窗口(多视图)
1.6K0
Android窗口管理分析(3):窗口分组及Z-order的确定总结
2.8K0
【QT】:QMainWindow 窗口
3740
dotnet 读 WPF 源代码笔记 使用 Win32 方法修改窗口的坐标和大小对窗口依赖属性的影响
8610
Silverlight中多个Xaml("场景"? or "窗口"? )之间的切换/调用/弹出/传参数问题小结
2.1K0
C# WPF MVVM开发框架Caliburn.Micro Screens, Conductors 和 Composition⑦
2.8K0
如何使用WPF用户界面框架编译EasyPlayPro-Win版本网页无插件视频播放器?
7080
WPF TreeGrid MVVM 模式下自定义表格带展开缩放效果,并且可以获取点击行的数据
6.2K0
WPF 多指触摸拖拽窗口 拖动修改窗口坐标
2.3K0
WPF 窗口和控件的 Unloaded 事件什么情况下不会触发
5990
【C#】分享一个弹出容器层,像右键菜单那样召即来挥则去
2.9K0
相关推荐
Windows wpf(下载应用介绍教程)
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验