我有一个带有MainWindow的简单WPF应用程序。在后面的代码中设置一个卸载的事件。将MainWindow
设置为启动uri。窗口关闭时不会触发卸载。创建第二个窗口 - NotMainWindow
,只需单击一下按钮。
在按钮单击事件中,调用MainWindow。关闭MainWindow
并触发卸载。 为什么会出现行为上的差异?我想要了解的是,我如何才能获得某种每次的单一时间?
<Window x:Class="WpfApplication2.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525" Unloaded="Main_Unloaded">
<Grid>
</Grid>
</Window>
private void Main_Unloaded(object sender, RoutedEventArgs e)
{
}
<Window x:Class="WpfApplication2.NotMainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="NotMainWindow" Height="300" Width="300">
<Grid>
<Button Content="Show Main" Height="25" Margin="10" Width="70" Click="Button_Click" />
</Grid>
</Window>
private void Button_Click(object sender, RoutedEventArgs e)
{
MainWindow win = new MainWindow();
win.Show();
}
<Application x:Class="WpfApplication2.App"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
StartupUri="NotMainWindow.xaml">
<Application.Resources>
</Application.Resources>
</Application>
答案 0 :(得分:3)
根据您的评论,我了解您所谈论的情景。这是一个known issue,在关闭应用程序时不会调用卸载(例如,最后一个窗口关闭)。
如果您只是想知道窗口何时关闭,请使用Closing
事件:
public MainWindow()
{
this.Closing += new CancelEventHandler(MainWindow_Closing);
InitializeComponent();
}
void MainWindow_Closing(object sender, CancelEventArgs e)
{
// Closing logic here.
}
如果您想知道最后一个窗口何时关闭,例如您的应用程序正在关闭,您应该使用ShutdownStarted
public MainWindow()
{
this.Dispatcher.ShutdownStarted += Dispatcher_ShutdownStarted;
InitializeComponent();
}
private void Dispatcher_ShutdownStarted( object sender, EventArgs e )
{
//do what you want to do on app shutdown
}