在App.xaml中创建窗口时无法找到资源定位器

时间:2016-04-20 15:01:23

标签: c# wpf 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可以正常工作。

我做错了什么?!

1 个答案:

答案 0 :(得分:1)

我认为您在App.xaml中拥有checkboxes.change(function(e) { //Get the checkbox state var isChecked; $(this).attr("checked") ? isChecked = true : isChecked = false; //Get the 2 checkbox with in the list and the grid var selectedData = $('input[name="' + $(this).attr("name") + '"]'); //Set the 2 checkbox in the same state selectedData = selectedData.prop('checked', isChecked); //Get the 2 selectedData checkbox parent var selectedDataParent = selectedData.closest('.vac_holder'); //Add or remove class for style if (isChecked == true) { selectedDataParent.addClass("pincard-checked"); } else { selectedDataParent.removeClass("pincard-checked"); } //Use juste one of the 2 set of check boc for serialisation var checkboxesForSerialization = $('.grid input[type="checkbox"]'); var ser = '?' + checkboxesForSerialisation.serialize() ; console.log(ser); });资源。将代码放在构造函数中时它不起作用的原因是App.xaml尚未加载。如果您看到visual studio生成的默认Locator方法,则可以看到在构造函数之后调用Main。此时初始化App.InitializeComponent文件中的资源。

您可以通过将代码放在Application.Startup事件中来解决问题,该事件在调用Application对象的Run方法时发生。 (如果设置了xaml,则在调用StartupUri后也会初始化它。)

Run

当然,您可以订阅该事件并在事件处理程序中编写代码。但是,当我们想要订阅基类中的事件时,最好覆盖相应事件的protected override void OnStartup(StartupEventArgs e) { base.OnStartup(e); var window = new MainWindow(); window.Show(); } 方法。

On和btw,您不需要此行OnXXX。它将由wpf自动完成。