我想在我的wpf应用程序中实现一个启动画面,我可以在其中显示一些状态消息。我找到了一个关于如何做的好教程。
我正在使用mvvm工具包。 我的App.xaml将StartupUri设置为“View / Shell.xaml”。一切正常。现在我想在“调用”StartupUri之前启动Splashscreen。
在App.xaml.cs中,我实现了这样的main方法:
[STAThread()]
static void Main()
{
Splasher.Splash = new IPA.Merlin.View.ViewSplashScreen();
Splasher.ShowSplash();
for (int i = 0; i < 1000; i++)
{
MessageListener.Instance.ReceiveMessage(string.Format("Load module {0}", i));
Thread.Sleep(1);
}
new App();
}
/// <summary>
///
/// </summary>
public App()
{
StartupUri = new System.Uri("View/Shell.xaml", UriKind.Relative);
Run();
}
要运行此操作,我必须将项目首选项中的startupobject更改为此主要方法。
所以现在我的Splashscreen被调用并显示测试消息,然后调用此App()。 我收到以下错误:提供'System.Windows.StaticResourceExtension'上的值引发内部错误的异常:“无法找到名称为{Locator}的资源
如果我将StartupUri更改为另一个窗口,则也找不到此窗口资源。 仅当我更改startupobject然后自己调用app.run时才会出现此问题。没有Splashscreen,所有资源都没有问题。
任何人都可以帮助我,因为它让我发疯了
提前致谢
答案 0 :(得分:0)
而不是创建Main()
方法,您可以override OnStartup
方法调用before main window gets initialized (App.xaml.cs)
-
protected override void OnStartup(StartupEventArgs e)
{
base.OnStartup(e);
Splasher.Splash = new IPA.Merlin.View.ViewSplashScreen();
Splasher.ShowSplash();
for (int i = 0; i < 1000; i++)
{
MessageListener.Instance.ReceiveMessage(string.Format("Load module {0}", i));
Thread.Sleep(1);
}
Splasher.CloseSplash();
}