仅在WPF中的ShowDialog()之后设置DialogResult

时间:2009-09-04 11:10:27

标签: wpf dialog

我有一个窗口,有时会使用Show()打开,有时会使用ShowDialog()。在第二种情况下,返回的对话结果对我来说很重要。但是,如果我在调用DialogResult后设置Show(),我会得到InvalidOperationException。有没有办法找出用于打开窗口的方法,并相应地设置DialogResult?或者还有另一种方式吗?

当然我知道我可以捕捉并忽略异常,但我不喜欢这个解决方案。

4 个答案:

答案 0 :(得分:9)

在窗口内使用System.Windows.Interop.ComponentDispatcher.IsThreadModal来确定它是否在模态线程上运行。

答案 1 :(得分:3)

如果你在Reflector中查看set_DialogResult,它会检查_showingAsDialog以确定对话框是否是模态的。不幸的是,这是一个私人领域。

在调用Show()/ ShowDialog()之前,是否始终构造窗口的新实例。如果是这样,您可以将一个参数传递给构造函数,指示它是如何显示的。

答案 2 :(得分:2)

您可以使用Form.Modal属性来检查使用方式。

在使用Form.Show()的情况下,您必须使用其他方式让来电者知道表格的任何结果。

是否有理由使用两种方式显示表单?

答案 3 :(得分:0)

如何在表单结束事件中设置this.DialogResult = DialogResult.blah?