4

我有一个主 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 为假。

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

4

3 回答 3

1

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

于 2011-05-05T16:21:58.533 回答
0

我在分配之前隐藏了我的窗口DialogResult。交换订单,所以DialogResult在隐藏窗口之前分配,解决了我的问题。即使窗口是ShowDialog'd,它也必须被认为是“打开的”才能DialogResult被设置。

编辑:窗口应该关闭,而不是隐藏。我发帖后就被我咬了。

于 2015-09-14T17:01:26.033 回答
-1

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

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

此外, DialogResult 是一种枚举类型 -true不是我希望看到分配给它的值。通常DialogResult.OKDialogResult.Yes将用于此。

于 2011-05-04T22:21:55.827 回答