2010-10-02 65 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