在应用程序关闭时获得windows可见性
本文关键字:windows 可见性 应用程序 | 更新日期: 2023-09-27 18:01:34
我有一个应用程序,它有一个主窗口和一些子窗口。我希望能够获得子窗口的可见性,并在用户关闭应用程序时保存它。
我尝试的事件如下
-
Window.Closing
-
Window.Closed
-
Aplication.Exit
-
UIElement.IsVisibleChanged
问题是它们是按以下顺序调用的
-
ChildWindow.VisibleChanged
-
ChildWindow.Closing
-
ChildWindow.Closed
-
MainWindow.Closing
-
MainWindow.Closed
-
Application.Exit
所以当应用程序存在或主窗口关闭时,所有的子窗口都是不可见的,我没有办法知道用户是否打开了它们。
我应该听一个不同的事件或者有不同的方法来做吗?
我已经成功地在一个空的wpf应用程序中复制了它。
public partial class MainWindow : Window
{
Window dummyWindow = new Window();
public MainWindow()
{
Application.Current.MainWindow = this;
InitializeComponent();
this.Loaded += MainWindow_Loaded;
this.IsVisibleChanged +=(s,ev) => Debug.WriteLine("Main visiblity changed");
this.Closing +=(s,ev) => Debug.WriteLine("Main closing");
this.Closed +=(s,ev) => Debug.WriteLine("Main closed");
Application.Current.Exit +=(s,ev) => Debug.WriteLine("App exit");
}
private void MainWindow_Loaded(object sender, RoutedEventArgs e)
{
dummyWindow.Show();
dummyWindow.Owner = this;
dummyWindow.IsVisibleChanged += (s,ev) => Debug.WriteLine("Dummy visiblity changed");
dummyWindow.Closing += (s,ev) => Debug.WriteLine("Dummy closing");
dummyWindow.Closed += (s,ev) => Debug.WriteLine("Dummy closed");
}
private void Button_Click(object sender, RoutedEventArgs e)
{
Application.Current.Shutdown();
}
}
你需要保存程序关闭时的状态。
你可以序列化你的ViewModel并将其保存在磁盘上,然后在程序重新启动时再次加载。
显然,这是因为当应用程序关闭时,WPF关闭窗口的顺序是创建窗口的顺序,它不会首先关闭MainWindow
。看看DoShutdown
方法。
在我的例子中,第一个窗口是dummyWindow
,因为初始化器在MainWindow
的构造函数之前运行,这意味着dummyWindow
的基本构造函数首先被调用,从而将窗口添加到Application.WindowsInternal
列表中。
MainWindow
的构造之后。