这是预期的行为 . 看看下面的内容
特别......
“在Window上设置此属性后,窗口将自动关闭,ShowDialog方法将返回您在DialogResult属性中设置的结果 .
因为DialogResult返回对话框的结果,所以设置DialogResult的值将表示对话框的使用结束是有意义的 .
设置DialogResult触发了一个Close . 当前方法完成后,对话框将关闭 . 这意味着执行Debug.WriteLine以及dialog.Close() .
如果在按钮单击中运行以下内容,您会看到相同的内容
this.Close();
MessageBox.Show("TEST");
this.Close();
第一次调用Close将触发关闭并触发Closing和Closed事件,代码继续执行,因此显示消息框,第二次调用Close被调用,但它被忽略,因为已经调用了close . 它不会再发生任何事件 .
这是我测试过的代码,我在App.xaml.cs的OnStartup事件中使用ShowDialog打开了MainWindow
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
}
private void Button_Click(object sender, RoutedEventArgs e)
{
this.DialogResult = true;
//Or call Close
//this.Close();
MessageBox.Show("TEST");
this.Close();
}
private void Window_Closing(object sender, System.ComponentModel.CancelEventArgs e)
{
MessageBox.Show("Window_Closing");
}
private void Window_Closed(object sender, EventArgs e)
{
MessageBox.Show("Window_Closed");
}
}