【发布时间】:2016-05-24 12:53:31
【问题描述】:
正如标题所说,有没有在不关闭对话框的情况下设置DialogResult?
可能简单的答案是否定的,但即便如此,为什么会这样? DialogResult= 背后的行为是什么?有没有办法覆盖它。
如果有人问我为什么需要这样的东西,简单的答案就是好奇。这种好奇心背后的“历史”是我试图从我的 ViewModel 调用对话框窗口。我的方法是以下混合的
如果对话框有返回值(True(Ok)/False(Cancel)),我需要(从对话框 viewModel)传递处理对话框的类的值,然后将其设置为DialogResult为了让父窗口/控件在对话框返回/关闭时得到它。
用于测试它的最小代码 sn-p,类似于
dialog.DialogResult = TheResult;
Debug.WriteLine("Dialog Closed");
dialog.Close();
虽然这不会失败,但在调用 dialog.Close(); 之前,当“对话框已关闭”打印到输出时,对话框会关闭。如果我覆盖 Window.Closing 事件,我可以看到它在调用 dialog.DialogResult 时触发,但在之后调用 dialog.Close(); 时不会。
注意:正如我所说,整个问题是“出于好奇”,因为上面的代码有效并且不会损害所需的功能。
【问题讨论】:
-
您确定它在实际调用
Close()之前关闭吗?有什么例外吗?你能显示更多代码吗? -
@PatrickHofman 我添加了更多信息。我认为我的其余代码无关紧要。我也没有任何例外。
-
@PatrickHofman 是的!通过设置
DialogResult,它会自动关闭窗口!这对我来说是全新的。我已经设置DialogResult并使用Close()6 年了!来源:docs.microsoft.com/en-us/dotnet/api/…,引用:“对话框上的确定和取消按钮也是开发人员提供的,尽管可能会设置DialogResult,它会自动关闭通过调用ShowDialog打开的窗口。”