簡體   English   中英

在App.xaml中創建窗口時找不到資源定位器

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM