在SplashScreen实现之后,不会加载WPF资源

时间:2013-03-27 16:54:43

标签: wpf mvvm resources

我想在我的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,所有资源都没有问题。

任何人都可以帮助我,因为它让我发疯了

提前致谢

1 个答案:

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