如何使用Windows X(关闭)按钮处理关闭事件? (带有“是/否问题”的消息框)
public MainWindow()
{
// some other code
Closing += (s, e) => ViewModelLocator.Cleanup();
}
实际上,我了解到Closing += (s,e)
调用ViewModelLocator.Cleanup()
来处理实例的注销,但是我想做的是单击消息框的"No"
按钮时取消关闭事件出现。
答案 0 :(得分:0)
从技术角度来看,这是一个lambda expression,带有s和e作为参数。由于e是FormClosingEventArgs,因此您可以决定是否使用
关闭表单e.Cancel = false;
或
e.Cancel = true;
答案 1 :(得分:0)
Closing
是一个事件,可以订阅。订阅事件是指指定事件发生时应采取的操作。
Closing
事件是不言自明的,并且在关闭窗口时会引发该事件。
预订一个事件,换句话说,意味着您只是“告诉”应该执行什么方法。所述方法应匹配委托,即
private void Window_Closing(object sender, System.ComponentModel.CancelEventArgs e)
{
...
}
其中Window_Closing
只是约定{object name}_{event name}
的方法名称。
相反,您可以像您发布的那样传递与所述委托人匹配的lambda表达式。
您提供的代码如下:
Closing += (s, e) => ViewModelLocator.Cleanup();
只是订阅一个事件。方法只是方法调用ViewModelLocator.Cleanup();
之一。
如果您需要在该事件上显示消息框,则只需编写您的方法(我将继续使用lambda表达式的示例):
Closing += (s, e) =>
{
var result = MessageBox.Show("Do you really want to close?", MessageBoxButton.YesNo);
e.Cancel = result != MessageBoxresult.Yes;
if(!e.Cancel)
ViewModelLocator.Cleanup();
};