0

我想在我的 wpf 应用程序中实现一个闪屏,我可以在其中显示一些状态消息。我找到了一个关于如何做到这一点的好教程。

我正在使用 mvvm 工具包。我的 App.xaml 将 StartupUri 设置为“View/Shell.xaml”。这一切都很好。现在我想在 StartupUri 被“调用”之前启动 Splashscreen。

在 App.xaml.cs 我实现了这样的主要方法:

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

为此,我必须将项目首选项中的启动对象更改为此主要方法。

所以现在我的 Splashscreen 被调用并显示测试消息,并且在这个 App() 被调用之后。我收到以下错误:在“System.Windows.StaticResourceExtension”上提供值引发内部错误异常:“找不到名为 {Locator} 的资源

如果我将 StartupUri 更改为另一个窗口,则也找不到此窗口资源。仅当我更改启动对象然后自己调用 app.run 时才会发生这种情况。如果没有启动画面,所有资源都可以毫无问题地找到。

谁能帮我解决这个问题,因为它让我发疯

提前致谢

4

1 回答 1

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();
}
于 2013-03-27T17:35:15.427 回答