1. 程式人生 > >C# WPF 一直保持多個Topmost窗體的置頂順序

C# WPF 一直保持多個Topmost窗體的置頂順序

out span chart highlight nec style web flow views

原文: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窗體的置頂順序