ShowDialog()什么时候返回null?

时间:2009-06-13 06:16:39

标签: wpf null showdialog

WPF的Window.ShowDialog方法返回一个可以为空的布尔值。 CommonDialog.ShowDialog也是如此。

现在,我理解这些将返回false的情况(用户单击取消或按下Esc),以及何时返回true(代码集Window.DialogResult为true,可能是为了响应OK单击)。但是null?

我的第一个想法是单击标题栏的“关闭”按钮可能会返回null。但是文档说明了(我通过测试证实)the title-bar Close button is treated as a Cancel

那么,Window.ShowDialogCommonDialog.ShowDialog何时会返回null?

3 个答案:

答案 0 :(得分:23)

该方法始终返回true或false,并且它始终等于窗口关闭时的DialogResult属性。

但是在关闭窗口之前,DialogResult属性为null,而另一个线程可以检查该属性。所以有意义的是,返回值是一个可以为空的布尔值来匹配属性,即使它实际上从不为null。

答案 1 :(得分:2)

如果我在按钮的Click事件中返回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"/>

答案 2 :(得分:0)

我可以举一个我刚刚遇到的例子。当您执行以下步骤时,Window.ShowDialog()将返回null:

  • 您首先关闭Application的所有窗口。
  • 截止到现在为止,使用Window关键字实例化的所有其他new对象。
  • 您尝试实例化一个新的Window并尝试在其上调用Window.ShowDialog()。它将返回null。

这是因为,大概您没有新的对话框可以绑定到的Window,以便像拥有最高窗口状态的对话框那样工作。