题
WPF 的 Window.ShowDialog
方法返回一个可为空的布尔值。也是如此 CommonDialog.ShowDialog
.
现在,我了解这些将返回 false 的情况(用户单击“取消”或按下 Esc),以及何时返回 true(代码集 Window.DialogResult
为 true,可能是响应单击“确定”)。但空?
我的第一个想法是单击标题栏的“关闭”按钮可能会返回 null。但文档指出(我通过测试证实) 标题栏“关闭”按钮被视为“取消”.
那么什么时候会 Window.ShowDialog
或者 CommonDialog.ShowDialog
曾经返回 null 吗?
解决方案
的方法,总是返回真或假,这总是等于在它关闭的时间窗口的DialogResult属性。
但DialogResult属性为null窗口被关闭之前,另一个线程可以检查属性。所以,那种是有道理的,返回值是一个布尔可为空的属性相匹配,即使它从未真正空。
其他提示
如果我返回的DialogResult = NULL在一个按钮的点击事件,则窗口保持打开状态。
private void OkButton_Click(object sender, RoutedEventArgs e)
{
Button btn = sender as Button;
if ( btn != null )
{
// forces all control to update...
btn.Focus();
}
// TEST IF OK TO CLOSE
bool rc = _vm.ProcessOkCommand();
if (rc)
{
DialogResult = true;
}
else
{
DialogResult = null;
}
}
<Button Content="OK" Name ="cmdOK" IsDefault="True" Click="OkButton_Click"/>
我可以给你举一个我刚刚遇到的例子。 Window.ShowDialog()
当执行以下步骤时将返回 null:
- 您首先关闭所有
Application
的窗户。 - 所有其他
Window
到目前为止已实例化的对象new
关键字已关闭。 - 你尝试实例化一个新的
Window
并尝试致电Window.ShowDialog()
在上面。它将返回 null。
这是因为,大概您没有现有的 Window
您的新对话框可以绑定到该对话框下,以便其行为类似于拥有最顶层窗口状态的对话框。
不隶属于 StackOverflow