只有在“窗口”创建并显示为“对话框”后,才能设置“对话结果”



我有一个主WPF窗口mywindow.showDialog当单击窗口上的按钮时,将执行命令比如命令是sendtotableccommand

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抛出异常。所以我添加了一个if检查使用IsThreadModal。它已经工作了一段时间,但现在m_owningwindow不关闭,因为IsThreadModal是假的。

我不知道解决这个问题的正确方法是什么,我认为我没有处理好。请帮助。提前感谢

Jason的回复让我想起了一个变通方法。即使用window. close(),然后在窗口上添加bool类型属性,例如OKClicked,替换任何设置dialog . close()的地方;窗口。OKClicked =真或假。替换对窗口的引用。对话结果与窗口。ok点击。解决方案有问题吗?由于

我在分配DialogResult之前隐藏了我的窗口。交换顺序,因此DialogResult在窗口隐藏之前被分配,解决了我的问题。即使窗口是ShowDialog 'd,为了设置DialogResult,它也必须被认为是"打开的"。

Edit:窗口应该关闭,而不是隐藏。

使用Form.Modal来确定窗体是作为窗口还是模态对话框打开的

你应该能够关闭()表单当你想要它关闭,不管它是否是一个对话框。(在某些情况下,您也可能需要在关闭后处理它)

另外,dialgresult是一个枚举类型- true不是一个值,我希望看到被分配给它。通常使用DialogResult.OKDialogResult.Yes

相关内容

  • 没有找到相关文章

最新更新