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();
}