2016-04-20 20 views
0
創建窗口時,無法找到資源定位符

我創建了App.xaml.cs構造像這樣在我的主窗口:在App.xaml中

MainWindow wnd = new MainWindow(); 

Application.Current.MainWindow = wnd; 
wnd.Show(); 

啓動應用程序給我一個XamlParseException,名爲「資源定位器「找不到。

這是可疑的行:

<DockPanel x:Name="MainPanel" DataContext="{Binding MainWindowViewModel, Source={StaticResource Locator}}" LastChildFill="True"> 

在App.xaml中使用StartupUri工作得很好。

我在做什麼錯?

回答

1

我相信你在App.xaml中的Locator資源。當你將代碼放入構造函數時它不工作的原因是App.xaml尚未加載。如果您看到visual studio生成的默認方法Main,則可以看到在構造函數之後調用了App.InitializeComponent。此時,xaml文件中的資源已初始化。

你可以把你的代碼在Application.Startup事件,當應用程序對象的run方法被調用時出現解決這個問題。 (如果StartupUri設置,它也初始化Run被調用後。)

protected override void OnStartup(StartupEventArgs e) 
{ 
    base.OnStartup(e); 
    var window = new MainWindow(); 
    window.Show(); 
} 

當然,你可以訂閱該事件,並在事件處理程序編寫代碼。但是,當我們想要訂閱基類中的事件時,最好覆蓋相應事件的OnXXX方法。

在和順便說一句,你並不需要這一行Application.Current.MainWindow = wnd;。它將由wpf自動完成。

+0

非常感謝,作品像一個魅力。如果我不想讓GUI顯示出來?創建沒有窗口並沒有真正的幫助,因爲應用程序仍然沒有窗口運行。我想實現一個/ noGui參數,如果它被設置,將不會創建窗口並完成一些任務。調用Application.Current.Shutdown()對我來說似乎是錯誤的。 – DoubleVoid

+0

在這種情況下,您需要修改App.g.cs.在那裏你可以找到Main方法。你可以在這裏添加你的邏輯。如果參數已設置,請勿運行該應用程序。否則。 –

+0

Application.Current.Shutdown()將無法工作,因爲它使App.Run()的返回,這意味着如果你沒有設定在主 –

相關問題