WPF usercontrol showdialog问题

时间:2010-10-02 07:30:28

标签: wpf exception user-controls showdialog

有一个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();
}

1 个答案:

答案 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