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 您的新对话框可以绑定到该对话框下,以便其行为类似于拥有最顶层窗口状态的对话框。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top