Поиск…


Вступление

При запуске приложения WPF для инициализации .NET Framework может потребоваться некоторое время для текущей среды выполнения CLR. В результате первое окно приложения может появиться через некоторое время после запуска приложения, в зависимости от сложности приложения. Экран заставки в WPF позволяет приложению показывать статическое изображение или настраиваемый динамический контент во время инициализации до появления первого окна.

Добавление простого экрана всплеска

Выполните следующие шаги для добавления заставки в приложение WPF в Visual Studio:

  1. Создайте или получите любое изображение и добавьте его в свой проект (например, внутри папки « Изображения »):

введите описание изображения здесь

  1. Откройте окно свойств для этого изображения ( Вид → Окно свойств ) и измените параметр « Действие» на значение SplashScreen :

введите описание изображения здесь

  1. Запустите приложение. Вы увидите свое изображение заставки в центре экрана до появления окна приложения (после появления окна изображение заставки будет исчезать в течение примерно 300 миллисекунд).

Тестирование экрана всплеска

Если ваше приложение легкое и простое, оно запустится очень быстро, и с такой же скоростью появится и исчезнет экран заставки.

Как только экран заставки исчезнет после завершения метода Application.Startup , вы можете имитировать задержку запуска приложения, выполнив следующие шаги:

  1. Открыть файл App.xaml.cs
  2. Добавить с использованием пространства имен using System.Threading;
  3. Переопределите метод OnStartup и добавьте Thread.Sleep(3000); внутри него:

введите описание изображения здесь

Код должен выглядеть так:

using System;
using System.Collections.Generic;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Threading;
using System.Windows;

namespace WpfApplication1
{
    /// <summary>
    /// Interaction logic for App.xaml
    /// </summary>
    public partial class App : Application
    {
        protected override void OnStartup(StartupEventArgs e)
        {
            base.OnStartup(e);

            Thread.Sleep(3000);
        }
    }
}
  1. Запустите приложение. Теперь он будет запущен примерно на 3 секунды дольше, поэтому у вас будет больше времени, чтобы протестировать ваш заставку.

Создание пользовательского окна заставки

WPF не поддерживает отображение ничего, кроме изображения, как экран заставки из коробки, поэтому нам нужно создать Window которое будет служить заставкой. Мы предполагаем, что мы уже создали проект, содержащий класс MainWindow , который должен быть основным окном приложения.

Прежде всего, мы добавляем окно SplashScreenWindow в наш проект:

<Window x:Class="SplashScreenExample.SplashScreenWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        WindowStartupLocation="CenterScreen"
        WindowStyle="None"
        AllowsTransparency="True"
        Height="30"
        Width="200">
    <Grid>
        <ProgressBar IsIndeterminate="True" />
        <TextBlock HorizontalAlignment="Center"
                   VerticalAlignment="Center">Loading...</TextBlock>
    </Grid>
</Window>

Затем мы переопределяем метод Application.OnStartup чтобы показать заставку, выполните некоторую работу и, наконец, покажем главное окно ( App.xaml.cs ):

public partial class App
{
    protected override void OnStartup(StartupEventArgs e)
    {
        base.OnStartup(e);

        //initialize the splash screen and set it as the application main window
        var splashScreen = new SplashScreenWindow();
        this.MainWindow = splashScreen;
        splashScreen.Show();

        //in order to ensure the UI stays responsive, we need to
        //do the work on a different thread
        Task.Factory.StartNew(() =>
        {
            //simulate some work being done
            System.Threading.Thread.Sleep(3000);

            //since we're not on the UI thread
            //once we're done we need to use the Dispatcher
            //to create and show the main window
            this.Dispatcher.Invoke(() =>
            {
                //initialize the main window, set it as the application main window
                //and close the splash screen
                var mainWindow = new MainWindow();
                this.MainWindow = mainWindow;
                mainWindow.Show();
                splashScreen.Close();
            });
        });
    }
}

Наконец, нам нужно позаботиться о механизме по умолчанию, который показывает MainWindow при запуске приложения. Все, что нам нужно сделать, это удалить StartupUri="MainWindow.xaml" из корневого тега Application в файле App.xaml .

Создание окна заставки с отчетами о ходе работы

WPF не поддерживает отображение ничего, кроме изображения, как экран заставки из коробки, поэтому нам нужно создать Window которое будет служить заставкой. Мы предполагаем, что мы уже создали проект, содержащий класс MainWindow , который должен быть основным окном приложения.

Прежде всего, мы добавляем окно SplashScreenWindow в наш проект:

<Window x:Class="SplashScreenExample.SplashScreenWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        WindowStartupLocation="CenterScreen"
        WindowStyle="None"
        AllowsTransparency="True"
        Height="30"
        Width="200">
    <Grid>
        <ProgressBar x:Name="progressBar" />
        <TextBlock HorizontalAlignment="Center"
                   VerticalAlignment="Center">Loading...</TextBlock>
    </Grid>
</Window>

Затем мы выставляем свойство в классе SplashScreenWindow чтобы мы могли легко обновить текущее значение выполнения ( SplashScreenWindow.xaml.cs ):

public partial class SplashScreenWindow : Window
{
    public SplashScreenWindow()
    {
        InitializeComponent();
    }

    public double Progress
    {
        get { return progressBar.Value; }
        set { progressBar.Value = value; }
    }
}

Затем мы переопределим метод Application.OnStartup чтобы показать заставку, выполните некоторую работу и, наконец, покажем главное окно ( App.xaml.cs ):

public partial class App : Application
{
    protected override void OnStartup(StartupEventArgs e)
    {
        base.OnStartup(e);

        //initialize the splash screen and set it as the application main window
        var splashScreen = new SplashScreenWindow();
        this.MainWindow = splashScreen;
        splashScreen.Show();

        //in order to ensure the UI stays responsive, we need to
        //do the work on a different thread
        Task.Factory.StartNew(() =>
        {
            //we need to do the work in batches so that we can report progress
            for (int i = 1; i <= 100; i++)
            {
                //simulate a part of work being done
                System.Threading.Thread.Sleep(30);

                //because we're not on the UI thread, we need to use the Dispatcher
                //associated with the splash screen to update the progress bar
                splashScreen.Dispatcher.Invoke(() => splashScreen.Progress = i);
            }

            //once we're done we need to use the Dispatcher
            //to create and show the main window
            this.Dispatcher.Invoke(() =>
            {
                //initialize the main window, set it as the application main window
                //and close the splash screen
                var mainWindow = new MainWindow();
                this.MainWindow = mainWindow;
                mainWindow.Show();
                splashScreen.Close();
            });
        });
    }
}

Наконец, нам нужно позаботиться о механизме по умолчанию, который показывает MainWindow при запуске приложения. Все, что нам нужно сделать, это удалить StartupUri="MainWindow.xaml" из корневого тега Application в файле App.xaml .



Modified text is an extract of the original Stack Overflow Documentation
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow