只有在创建Window并显示为对话框后才能设置DialogResult

时间:2011-05-04 19:58:10

标签: c# wpf window dialogresult

我有一个主WPF窗口mywindow.showDialog 当在窗口上单击按钮时,执行命令 假设该命令是SendToTableCommand

protected virtual void SendToTableExecute(object o)
{
    UIThread.BeginInvoke(new Action<object>(SendToTableExecuteUI),o);
}

private void SendToTableExecuteUI(object o)
{
    if (o is Control)
    {
        m_OwningWindow = UIHelper.FindVisualParent<Window>((Control)o);
    }

    do sth...

    if (m_OwningWindow != null)
    {
        //only set DialogResult when window is ShowDialog before
        if(System.Windows.Interop.ComponentDispatcher.IsThreadModal)
            m_OwningWindow.DialogResult = true;
    }
}

前一段时间,m_OwningWindow.DialogResult = true抛出异常。所以我添加了一个使用IsThreadModal的if检查。它已经工作了一段时间,但现在m_OwningWindow不会因为IsThreadModal是假的而关闭。

我不知道解决问题的正确方法是什么,并认为我没有正确处理它。 请帮忙。提前谢谢

3 个答案:

答案 0 :(得分:1)

杰森的回复让我想起了一个解决方法。即使用Window.Close(),然后在窗口上添加一个bool类型属性,比如OKClicked,替换任何将DialogResult设置为window.Close(); window.OKClicked = true或false。用window.OKClicked替换对window.DialogResult的引用。 解决方法有什么问题吗?谢谢

答案 1 :(得分:0)

我在分配DialogResult之前隐藏了我的窗口。交换订单,因此在隐藏窗口之前分配DialogResult,修复了我的问题。即使窗口为ShowDialog'd,也必须将其视为“打开”才能设置DialogResult

修改:窗口应该关闭,而不是隐藏。在我发布之后,这就是我。

答案 2 :(得分:-1)

使用Form.Modal确定您的表单是作为窗口还是模态对话框打开。

无论是否是对话框,您都应该能够关闭()表格。 (在某些情况下,您可能还需要在关闭后处理它)

此外,DialogResult是一个枚举类型 - true不是我期望看到的值。通常会使用DialogResult.OKDialogResult.Yes