Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/apache-flex/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 只有在创建窗口并显示为对话框后,才能设置DialogResult_C#_Wpf_Window_Dialogresult - Fatal编程技术网

C# 只有在创建窗口并显示为对话框后,才能设置DialogResult

C# 只有在创建窗口并显示为对话框后,才能设置DialogResult,c#,wpf,window,dialogresult,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) {

我有一个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;
    }
}
受保护的虚拟void SendToTableExecute(对象o)
{
BeginInvoke(新操作(SendToTableExecuteUI),o);
}
私有void SendToTableExecuteUI(对象o)
{
if(o为控制)
{
m_OwningWindow=UIHelper.findvisualpart((控制)o);
}
做某事。。。
如果(m_OwningWindow!=null)
{
//仅当窗口在之前显示Dialog时设置DialogResult
if(System.Windows.Interop.ComponentDispatcher.IsThreadModal)
m_OwningWindow.DialogResult=true;
}
}
不久前,
m_OwningWindow.DialogResult=true
引发异常。所以我添加了一个使用IsThreadModal的if检查。它已经工作了一段时间,但现在m_owningWindow没有关闭,因为IsThreadModal为false

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

使用
表单.模式
确定表单是作为窗口还是模式对话框打开的

无论窗体是否为对话框,都应该能够在希望关闭窗体时关闭()窗体。(在某些情况下,您可能还需要在交割后进行处置)


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

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

在分配
对话框结果
之前,我正在隐藏我的窗口。交换顺序,以便在隐藏窗口之前分配
对话框结果
,修复了我的问题。即使窗口是
ShowDialog
'd,也必须将其视为“打开”,以便设置
DialogResult


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

谢谢。这不是形式。这是WPF窗口,没有模式属性,我可以使用window.Close关闭它,但我想根据用户是否单击OK按钮或Cancel退出窗口来执行不同的操作。WPF窗口上的对话框结果是否为布尔?我主要关心的是在一个窗口之后引用一个窗口的属性是否安全。close()?System.Windows.Window上没有已释放的属性