Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Can';在App.xaml中创建窗口时找不到资源定位器_C#_Wpf_Xaml - Fatal编程技术网

C# Can';在App.xaml中创建窗口时找不到资源定位器

C# Can';在App.xaml中创建窗口时找不到资源定位器,c#,wpf,xaml,C#,Wpf,Xaml,我正在App.xaml.cs构造函数中创建主窗口,如下所示: MainWindow wnd = new MainWindow(); Application.Current.MainWindow = wnd; wnd.Show(); 启动应用程序会给我一个XamlParseException,无法找到名为“Locator”的资源 这是一条可疑的线: <DockPanel x:Name="MainPanel" DataContext="{Binding MainWindowViewMod

我正在
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中有你的
定位器
资源。将代码放入构造函数时,它不起作用的原因是App.xaml尚未加载。如果看到visual studio生成的默认
Main
方法,则可以看到在构造函数之后调用
App.InitializeComponent
xaml
文件中的资源此时初始化

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

当然,您可以订阅该事件并在事件处理程序中编写代码。但是,当我们想要订阅基类中的事件时,最好覆盖相应事件的
OnXXX
方法


顺便说一句,您不需要这一行
Application.Current.MainWindow=wnd。它将由wpf自动为您完成。

我猜您在App.xaml中有您的
定位器。将代码放入构造函数时,它不起作用的原因是App.xaml尚未加载。如果看到visual studio生成的默认
Main
方法,则可以看到在构造函数之后调用
App.InitializeComponent
xaml
文件中的资源此时初始化

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

当然,您可以订阅该事件并在事件处理程序中编写代码。但是,当我们想要订阅基类中的事件时,最好覆盖相应事件的
OnXXX
方法


顺便说一句,您不需要这一行
Application.Current.MainWindow=wnd。这将由wpf自动为您完成。

非常感谢,非常有魅力。如果我根本不想GUI出现怎么办?!创建无窗口并没有真正的帮助,因为应用程序仍在运行,没有窗口。我想实现一个/noGui参数,如果设置了它,就不会创建窗口,也不会完成一些任务。调用Application.Current.Shutdown()对我来说似乎是错误的。在这种情况下,您需要修改App.g.cs。在那里你可以找到主要的方法。你可以在这里添加你的逻辑。如果参数已设置,请不要运行应用程序。Else do.Application.Current.Shutdown()将不起作用,因为它使App.Run()返回,这意味着如果在MainApplication上没有设置自定义逻辑,程序将结束。Current.Shutdown()似乎起作用,程序将关闭。App.g.cs位于obj文件夹中。我想这是一个更正确的方法,当改变App.g.cs:。我想我现在会坚持关机,看起来工作得很好。Start=>Check console param=>do stuff=>Shutdown()非常感谢,非常有用。如果我根本不想GUI出现怎么办?!创建无窗口并没有真正的帮助,因为应用程序仍在运行,没有窗口。我想实现一个/noGui参数,如果设置了它,就不会创建窗口,也不会完成一些任务。调用Application.Current.Shutdown()对我来说似乎是错误的。在这种情况下,您需要修改App.g.cs。在那里你可以找到主要的方法。你可以在这里添加你的逻辑。如果参数已设置,请不要运行应用程序。Else do.Application.Current.Shutdown()将不起作用,因为它使App.Run()返回,这意味着如果在MainApplication上没有设置自定义逻辑,程序将结束。Current.Shutdown()似乎起作用,程序将关闭。App.g.cs位于obj文件夹中。我想这是一个更正确的方法,当改变App.g.cs:。我想我现在会坚持关机,看起来工作得很好。开始=>检查控制台参数=>do stuff=>Shutdown()
protected override void OnStartup(StartupEventArgs e)
{
    base.OnStartup(e);
    var window = new MainWindow();
    window.Show();
}