2010-10-02 167 views
0

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

代码

在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(); 
} 

回答

2

在这种情况下该错误消息是相当准确:一旦一个窗口被关闭,它的关闭好。由于ShowDialog()总是关闭窗口,因此每次调用ShowDialog()时都需要创建窗口的新实例。

一个相当简单的方式在你的例子来完成,这是有Load事件采取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