0

有一个 MainWindow,一个位于我的 MainWindow 中的 usercontrol 和一个我将从 usercontrol 显示的 OtherForm。我将 OtherForm 作为参数从 MainWindow 发送到 usercontrol。在用户控件中,我正在调用OtherForm.showdialog. 当我第二次显示它时,出现“在窗口关闭后无法设置可见性或调用 Show、ShowDialog 或 WindowInteropHelper.EnsureHandle”的问题。

代码

在 MainWindow 类中

void Example()
{
   usercontrol.Load(new Otherform{ variable= 1 });
}

在用户控件类中

private Window _form;
public void Load(window form)
{
    _form=form;
}

void ExampleInUSerControl
{
   _form.VerifyAccess();
   _form.Activate();
   _form.ShowActivated = true;
   _form.ShowDialog();
}
4

1 回答 1

2

这种情况下的错误消息非常准确:一旦关闭了 Window,它就会永久关闭。由于ShowDialog()总是关闭窗口,因此每次调用时都需要创建一个新的窗口实例ShowDialog()

在您的示例中完成此操作的一种相当简单的方法是让Load事件采用 type 的参数Func<Window>

在主窗口中:

private Window MakeWindow()
{
   return new MyWindow();
}

private void Example()
{
   usercontrol.Load(MakeWindow);
}

在用户控件中:

public void Load(Func<T> makeWindow)
{
   _form = makeWindow();
   ...
}

请注意,顺便说一句,应该没有理由调用Activate或设置ShowActivated-ShowDialog将完成所有这些。我也不知道你为什么要打电话VerifyAccess

于 2010-10-02T17:31:00.900 回答