我有一个窗口,如果用户按下红色X(关闭)按钮,我想关闭应用程序。为此,我处理 Closing 事件并制作Environment.Exit(0);
如果用户结束使用Window并单击“接受”我想关闭它,但如果我发出this.Close();
,则会触发 Closing 事件并关闭整个App。
我尝试使用调试器检查事件的 sender 参数,但在两种情况下都是Window对象。有没有办法检查事件触发器的源元素?
我可以使用一个标志,当用户单击“接受”时将其设置为true,并且当它为真时不要使Environment.Exit(0);
,但我不认为这是一个干净的解决方案。
答案 0 :(得分:3)
当试图关闭窗口时调用OnClosing触发器。您可以根据您的条件(旗帜或确认框)取消它
// exemple with flag
private void Window_Closing(object sender, System.ComponentModel.CancelEventArgs e)
{
if (this.allowedToClose == false)
{
// this window will not close
e.Cancel = true;
}
else if (this.appMustClose == true)
{
// close the app
Application.Current.Shutdown();
}
}
将e.Cancel设置为true以取消关闭。让它为假,窗户将关闭。您不需要使用Environment.Exit,除非窗口不是主窗口。
您可以使用Application.Current.Shutdown()而不是Environment.Exit(0)。我认为这是正确的。