C# WPF 一直保持多個Topmost窗體的置頂順序
阿新 • • 發佈:2018-11-03
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窗體的置頂順序