在运行时有条件地更改 SplashScreen 图像

Conditionally changing a SplashScreen image during runtime

当我的应用程序加载时,我有一个显示为初始屏幕的现有图像。我关注了:

How to: Add a Splash Screen to a WPF Application

我将图像的构建操作设置为 'SplashScreen'(我将其称为制作启动画面的“内置”方式)。一切正常,我的图像在应用程序加载期间显示。

现在,我想在两个不同的静态图像之间动态切换 - 取决于是否满足条件(在运行时决定)。

我尝试添加 second 图像并将其构建操作设置为 'SpashScreen',但这会产生几个构建错误(none直接与图像相关 属性 更改)。我也可以创建一个自定义 Window 并手动显示它,但这似乎会导致内置启动画面没有的延迟。内置功能也适用于所有分辨率。

有没有办法根据情况在不同的初始屏幕图像之间切换?

MSBuild 操作是设置初始屏幕的一种简化方法。

但是,您也可以通过代码手动创建它,以便更好地控制它何时显示和何时关闭。您可以简单地创建一个 SplashScreen 类型的实例,并将路径传递到您的项目或其他地方的图像。

在这个例子中,我添加了图像并将它们的 BuildAction 设置为 Resource。然后我覆盖 OnStartup 方法(您也可以将事件处理程序添加到 Startup 事件)并选择初始屏幕图像的路径取决于一些条件,最后创建了一个 SplashScreen 的实例,并使用 Show(bool autoClose) 方法显示它。 autoClose 标志设置为 true,因此启动画面会在应用程序启动后立即关闭。如果您想自己决定何时关闭它,请传递 false 并调用 Close 方法。还有一个重载 Show 使启动画面最顶层 window.

public partial class App : Application
{
   protected override void OnStartup(object sender, StartupEventArgs e)
   {
      string splashScreenPath;
      if (isPiratedVersionOfMyApp)
         splashScreenPath = @"\Resources\PiratedSplashScreen.jpg";
      else if (isMagicVersionOfMyApp)
         splashScreenPath = @"\Resources\MagicSplashScreen.jpg";
      else
         splashScreenPath = @"\Resources\DefaultSplashScreen.jpg";

      SplashScreen splashScreen = new SplashScreen(splashScreenPath);
      splashScreen.Show(true);

      base.OnStartup(e);
      // ...other code.
   }
}