WPF Splash Screen – A New Splash Screen Manager (v20.1)

WPF Team Blog
06 July 2020

A splash screen is an effective way to improve an app’s user experience during lengthy startup operations. Unfortunately, creating an effective splash screen can be tricky because two competing objectives must be addressed simultaneously:

  • A splash screen needs to be visually appealing. It’s your first chance to make a great impression.
  • A splash screen should load instantaneously. Loading delays will defeat the overall purpose of the splash screen.

As you may already know, our WPF Subscription includes DXSplashScreen - A UI component that was built years ago to help you create and add splash screens to any WPF app.

Our latest release (v20.1) includes an entirely new Splash Screen control - a UI component we’ve named SplashScreenManager.

Let’s quickly look at the new DevExpress Splash Screen Manager, review why it was built, and why we replaced DXSplashScreen.

Design Elegance

Our Splash Screen Manager ships with two predefined styles – Themed, Fluent (Acrylic).

As its name implies, a Themed Splash Screen uses the same color scheme as that used by your application.

Our next predefined style - Fluent Splash Screen - features an Acrylic effect. As you can see below, this splash screen uses a translucent background. Once again, we’ve optimized the splash screen as much as possible – making certain that it loads quickly.

App-wide Wait Indicators

Wait Indicators are a great way to provide feedback during time-intensive operations. I can cite countless examples to illustrate this point. For instance, a wait indicator will improve an app’s user experience during long fetch operations.

You can use our new Splash Screen Manager to create wait indicators within your app as needed. Simply set the owner and trackOwnerPosition parameters of the Show method to place a splash screen atop a specific UI element and keep it there if the user resizes or drags the window around.

Splash screens created with the Splash Screen Manager are processed in a separate thread and do not interfere with the main application flow.

However, you may want to control user interaction with your application once you’ve displayed the “splash screen” in this specific usage scenario. This can be done with a single method parameter. Your options vary: you can block the application, restrict input within the window but allow the user to drag the window around, or block a specific element. It’s all up to you.

Performance

This post began with a simple proposition – a splash screen must be loaded quickly. Well, we designed SplashScreenManager so it’s fast. To maximize performance and ensure a timely display, we’ve made certain not to load all DevExpress Theme resources – We load what we need so we can render the splash screen quickly.

We have measured the startup time on different PC configurations with and without the Ngen.exe optimization:

Themed Splash Screen: 290-450 ms

Fluent Splash Screen: 300-460 ms

Compiled with Ngen.exe:

Themed Splash Screen: 170-370 ms

Fluent Splash Screen: 180-370 ms

In comparison, DXSplashScreen (with a default template) renders in 720-1000 ms. (450-900 ms after Ngen.exe compilation). The bottom line is this: our new SplashScreenManager loads about 50% faster.

Of course, performance metrics are app dependent. If you’d like to take a closer look at our comparison figures, simply download this project from Github: https://github.com/DevExpress-Examples/splashscreenmanager-startup-test

Ease of Use

We’ve tried to make use of the SplashScreenManager as painless as possible. Here is how you can integrate it into your next app:

Step One - Add the following code to App.xaml.cs:

SplashScreenManager.CreateThemed(new DXSplashScreenViewModel { 
    Status = "Starting...", 
    Title = "The Best or Nothing!" } 
).ShowOnStartup(); 

Step Two – Just kidding, there’s no second step. The code above generates a splash screen using an application’s default color scheme, displays it with a priority over the main application to minimize delays, and hides it once the application is initialized.

Ease of Customization

You can edit the content of our predefined splash screens with a few lines of code by accessing the view model. You can swap the image used, edit displayed text, and modify progress bar value.

If you require more extensive customization, you can incorporate a predefined splash screen from our Template Gallery or implement your own design from scratch. Our documentation includes a tutorial to help simplify this process.

MVVM in Mind

We extended our set of services to help you add SplashScreenManager functionality to MVVM-compliant applications. Add a splash screen from our template gallery to your application, customize it as you see fit and then add the SplashScreenManagerService to your view of choice. Easy as 1-2-3.

Feedback

If you'd like to share your thoughts about SplashScreenManager, please post a comment below. We’ll be happy to follow up.

What’s New in v20.1

To explore the scope, breadth and capabilities of our new products/features, please visit: https://www.devexpress.com/Subscriptions/New-2020-1.xml.
6 comment(s)
Dalibor Stys
Dalibor Stys
Hello, how can I use ShowOnStartup method with SplashScreenManagerService?
8 July 2020
Wojciech
Wojciech

Hi.

What about WinForms?

Is this new, faster SplashScreen available in WinForms?


Thanks

8 July 2020
Dmitry (DevExpress)
Dmitry (DevExpress)

@Wojciech

Yes, Themed and Fluent splash screens are available in WinForms v20.1 release. You can watch this video on our YouTube channel for more information: Fluent UI and Skins. As for the "faster" part of your question, WinForms splash screens never had performance issues before. That is, you won't get a significant performance boost from these new splash screens, but they are still fast :)

8 July 2020
Vasily (DevExpress)
Vasily (DevExpress)

@Dalibor

The SplashScreenManagerService does not have the ShowOnStartup method. This service displays a splash screen at runtime. The ShowOnStartup method is used to display a splash screen at application startup - when the MVVM environment has not even started initializing.

8 July 2020
Dalibor Stys
Dalibor Stys

@Vasily

Thank you for your answer. This makes sense, I was just asking because the previous splashscreenservice had ShowSplashScreenOnLoading parameter.

8 July 2020
Vasily (DevExpress)
Vasily (DevExpress)

@Dalibor

You are welcome! Ask away if you have any other questions.

8 July 2020

Please login or register to post comments.