2014-02-22 68 views
2

在WPF/PRISM中,當你創建shell時,它將被分配到App.Current.MainWindow。然而,在在瀏覽器中一個WPF(XBAP)的行:如何在XBAP/Prism中初始化Shell?

App.Current.MainWindow = (Window)Shell; 

失敗,錯誤消息:

無法轉換類型的對象 'XBAPClient.Page1' 爲類型「System.Windows.Window 」。

protected override DependencyObject CreateShell() 
{    
    return this.Container.GetExportedValue<Page1>(); 
} 

protected override void InitializeShell() 
{ 
    base.InitializeShell(); 
    App.Current.MainWindow = (Window)Shell; 
    App.Current.MainWindow.Show(); 
} 

我怎樣才能加載的殼呢?

+0

您應該只分配你的頁面窗口的內容是這樣的。所以你不能將Shell轉換爲Window。欲瞭解更多信息,請查看此主題:http://compositewpf.codeplex.com/discussions/31058?ProjectName=compositewpf – kmatyaszek

+0

更新:我已遵循第一條評論。說明很好。但仍然沒有運氣。調查爲什麼它沒有運行。但至少它的建築。謝謝 – Houman

+0

@kmatyaszek不幸的是''CreateShell'首先被調用,在'Page1.xaml.cs'可以設置'Bootstrapper.ShellPage = this'之前;因此它返回一個始終爲空的shell。你有什麼建議嗎? – Houman

回答

2

在XBAP Application.Current.MainWindow中是MS.Internal.AppModel.RootBrowserWindow。如果您使用的不是窗口Page使用XBAP

... 
protected override void InitializeShell() 
{ 
    base.InitializeShell();  
    Application.Current.MainWindow.Content = Shell; 
} 
... 
+0

你是明星!現在它實際上工作。你是怎麼弄出來的? +1 – Houman

+1

我只是調試代碼,並試圖解決這個問題:) – kmatyaszek