[英]Can't find resource Locator when creating window in App.xaml
我正在App.xaml.cs
構造函數中創建我的主窗口,如下所示:
MainWindow wnd = new MainWindow();
Application.Current.MainWindow = wnd;
wnd.Show();
啟動應用程序會給我XamlParseException
,找不到名為“ Locator”的資源。
這是可疑的行:
<DockPanel x:Name="MainPanel" DataContext="{Binding MainWindowViewModel, Source={StaticResource Locator}}" LastChildFill="True">
在App.xaml中使用StartupUri
可以正常工作。
我究竟做錯了什么?!
我假設您在App.xaml中有您的Locator
資源。 當您將代碼放入構造函數中時,它不起作用的原因是因為尚未加載App.xaml。 如果看到由Visual Studio生成的默認Main
方法,則可以看到在構造函數之后調用了App.InitializeComponent
。 此時, xaml
文件中的資源已初始化。
您可以通過將代碼放在Application.Startup事件中來解決此問題,該事件在調用Application對象的Run方法時發生。 (如果設置了StartupUri
,則在調用Run
之后也會對其進行初始化。)
protected override void OnStartup(StartupEventArgs e)
{
base.OnStartup(e);
var window = new MainWindow();
window.Show();
}
當然,您可以訂閱該事件並在事件處理程序中編寫代碼。 但是,當我們想在基類中訂閱事件時,最好為相應的事件重寫OnXXX
方法。
順便說一句,您不需要此行Application.Current.MainWindow = wnd;
。 wpf會自動為您完成。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.