原文:C# WPF 一直保持多个Topmost窗体的置顶顺序

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/m0_37862405/article/details/80915523

  参考自:https://blog.csdn.net/okkk/article/details/44118469

  需求:多个窗体的Topmost都设置为true时候,还需要控制它们的置顶顺序。

  解决方法:结合窗体SourceInitialized事件和WindowInteropHelper类设置窗口所有者的句柄。在最后初始化的那个窗体的SourceInitialized事件中,设置窗口所有者的句柄。

  例如:有两个Topmost窗口:窗口A和窗口B,需要这两个窗口都置顶显示,并且,窗口A显示在窗口B前面。这时候可以把窗口A的所有者设置为窗口B,因为子窗口(窗口A)会显示在所有者窗口(窗口B)前面。

代码:

    //MainWindow 就是窗口A
public partial class MainWindow : Window
{
Window windowB;
public MainWindow()
{
InitializeComponent();
Topmost = true; windowB = new Window { Topmost = true };
windowB.SourceInitialized += windowB_SourceInitialized;
} private void windowB_SourceInitialized(object sender, EventArgs e)
{
//通过设置所有者,更改置顶顺序
WindowInteropHelper helperA = new WindowInteropHelper(this);
WindowInteropHelper helperB = new WindowInteropHelper(windowB);
helperB.Owner = IntPtr.Zero;
helperA.Owner = helperB.Handle; //窗口A的所有者为窗口B,则窗口A显示在最前面
//测试另外一种置顶顺序
// helperA.Owner = IntPtr.Zero;
// helperB.Owner = helperA.Handle;
} private void button1_Click(object sender, RoutedEventArgs e)
{
windowB.Show();
}
}

C# WPF 一直保持多个Topmost窗体的置顶顺序的更多相关文章

  1. WinFrom窗体始终置顶

    调用WindowsAPI使窗体始终保持置顶效果,不被其他窗体遮盖: [DllImport("user32.dll", CharSet = CharSet.Auto)] privat ...

  2. C#或者WPF中让某个窗体置顶

    原文:C#或者WPF中让某个窗体置顶 前记:在工作中有个需求,要求不管到那个界面,我必须让一个浮动条(其实是个窗体)置顶. 我用wpf,因为有之前有好几个界面已经设置成topmost了,所以在这几个界 ...

  3. WPF主窗体调用 User32的SetWindowPos 设置窗体置顶会导致与其他窗体抢夺焦点的问题

    最近发现:自己开发的窗体应用,在二级弹窗或者提示框弹出的时候,交替点击窗体和窗体外(相当于窗体交替的获取焦点和失去焦点),都会导致其他的应用一闪一闪的. 经过排查,是由于该窗体由于部分因素考虑,用了  ...

  4. Python tkinter 副窗体置顶和取消置顶

    root = Tk() #置顶root.wm_attributes('-topmost',1) #取消置顶 root.wm_attributes('-topmost',0)

  5. Creating Dialogbased Windows Application (3) / 创建基于对话框的Windows应用程序(三)Checkbox的应用、窗体置顶、设置图标 / VC++, Windows

    创建基于对话框的Windows应用程序(三) —— Checkbox的应用.窗体置顶.设置图标 上一节创建的窗体应用程序中,我们用到了Button和StaticText这两个控件.这一节中我们将学习使 ...

  6. WPF:窗体置顶

    1.设置窗体TopMost属性 private DispatcherTimer timer; public Window1() { InitializeComponent(); Loaded += n ...

  7. C#让TopMost窗体弹出并置顶层但不获取当前输入焦点的终极办法

    为了使程序在弹出窗口时置顶层且不获取系统输入焦点,避免影响用户当前的操作,来电通来电弹屏软件尝试过N多种办法,例如:弹出前保存当前焦点窗口句柄,弹出时因为使用TopMost系统默认将焦点交给了弹出窗口 ...

  8. WPF Prism MVVM 中 弹出新窗体. 放入用户控件

    原文:WPF Prism MVVM 中 弹出新窗体. 放入用户控件 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/qq_37214567/artic ...

  9. [C# WPF] 根据按钮动态跳转窗体

    WPF 根据按钮动态跳转窗体 XMAL文件中,用Tag保存要跳的页面 <Button Name="btnWindow01" Content="ClickMe&quo ...

随机推荐

  1. IOS自动化测试 UIAutomation

    一.通过Xcode工具编写运行测试脚本 说明:如果是在IOS模拟器上运行测试用例,需要有被测试应用的源代码才有权限把应用安装到模拟器中,当前示例中使用了自己编写的一个简单Iphone应用,大家也可以直 ...

  2. ImageView的圆角半径

    // 设置imageview的圆角半径 UIImageView *imageView = (UIImageView *)[cell viewWithTag:tag]; imageView.layer. ...

  3. [慕课笔记]mongodb入门篇

    一:对mongodb有一个系统的完备的了解,只有概念清楚了,才能更好的使用 二:学会mongodb数据库的搭建 首先:了解如何部署数据库的服务 搭建简单的单机服务到搭建具有冗余容错功能的复制集再到搭建 ...

  4. CImage将图片转为指定像素大小

    CFileDialog fDlg(true, "jpg", "",   OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,   &q ...

  5. GCD 初步学习

    GCD应该是比較牛逼的东西了吧,一时半会应该是操作不好. 在cocoa-china上面有两篇关于GCD的文章.GCD 深入理解(一) GCD 深入理解(二) CSDN荣芳志博客:点击打开链接 我仅仅是 ...

  6. Linux 下查看线程信息

    1. 使用 pstree -p PID ps aux | grep firefox | grep -v grepcharles  26058  0.0  0.0   4908  1152 ?      ...

  7. flash stm32的flash编写

    定义一个全局变量数组:const u8 TEXT_Buffer[]={"STM32F103 FLASH TEST"};    //u8和char* 写入到内存里会有什么区别???? ...

  8. Spring Cloud底层原理

    目录 一.业务场景介绍 二.Spring Cloud核心组件:Eureka 三.Spring Cloud核心组件:Feign 四.Spring Cloud核心组件:Ribbon 五.Spring Cl ...

  9. Vue源码--深入模板渲染

    原文链接:https://geniuspeng.github.io/2018/02/07/vue-compile/ 之前整理了vue的响应式原理,在这里有一点是一直很模糊的,就是何时去new一个wat ...

  10. 【a702】贷款利率

    Time Limit: 10 second Memory Limit: 2 MB 问题描述 当一个人从银行贷款后,在一段时间内他将不得不每月尝还固定的分期付款.这个问题要求计算机出贷款者向银行支付的利 ...