有一个MainWindow,一个位于我的MainWindow中的usercontrol和一个我将从usercontrol显示的OtherForm。我将OtherForm作为参数从MainWindow发送到usercontrol。在usercontrol中,我正在调用OtherForm.showdialog
。当我第二次显示它时,我得到“无法设置可见性或在窗口关闭后调用Show,ShowDialog或WindowInteropHelper.EnsureHandle”问题。
代码
在MainWindow类中
void Example()
{
usercontrol.Load(new Otherform{ variable= 1 });
}
在Usercontrol类
中private Window _form;
public void Load(window form)
{
_form=form;
}
void ExampleInUSerControl
{
_form.VerifyAccess();
_form.Activate();
_form.ShowActivated = true;
_form.ShowDialog();
}
答案 0 :(得分:2)
在这种情况下,错误消息非常准确:一旦Window关闭,它就会关闭。由于ShowDialog()
始终关闭窗口,因此每次调用ShowDialog()
时都需要创建窗口的新实例。
在您的示例中完成此操作的一种相当简单的方法是让Load
事件采用Func<Window>
类型的参数:
在MainWindow中:
private Window MakeWindow()
{
return new MyWindow();
}
private void Example()
{
usercontrol.Load(MakeWindow);
}
在用户控件中:
public void Load(Func<T> makeWindow)
{
_form = makeWindow();
...
}
顺便说一句,请注意,没有理由致电Activate
或设置ShowActivated
- ShowDialog
会做到这一切。我不知道你为什么打电话给VerifyAccess
。