wpf
Tworzenie ekranu powitalnego w WPF
Szukaj…
Wprowadzenie
Dodanie prostego ekranu powitalnego
Wykonaj następujące kroki, aby dodać ekran powitalny do aplikacji WPF w Visual Studio:
- Utwórz lub pobierz dowolny obraz i dodaj go do swojego projektu (np. W folderze Obrazy ):
- Otwórz okno właściwości tego obrazu ( Widok → Okno właściwości ) i zmień ustawienie Kompilacji działania na wartość SplashScreen :
- Uruchom aplikację. Zobaczysz obraz ekranu powitalnego na środku ekranu, zanim pojawi się okno aplikacji (po wyświetleniu okna obraz ekranu powitalnego zniknie w ciągu około 300 milisekund).
Testowanie ekranu powitalnego
Jeśli aplikacja jest lekka i prosta, uruchomi się bardzo szybko, z podobną prędkością pojawi się i zniknie ekran powitalny.
Gdy tylko ekran powitalny zniknie po zakończeniu metody Application.Startup
, możesz zasymulować opóźnienie uruchomienia aplikacji, wykonując następujące kroki:
- Otwórz plik App.xaml.cs
- Dodaj za pomocą przestrzeni nazw
using System.Threading;
- Zastąp metodę
OnStartup
i dodajThread.Sleep(3000);
w środku tego:
Kod powinien wyglądać następująco:
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);
}
}
}
- Uruchom aplikację. Teraz będzie działać przez około 3 sekundy dłużej, więc będziesz mieć więcej czasu na przetestowanie ekranu powitalnego.
Tworzenie niestandardowego okna ekranu powitalnego
WPF nie obsługuje wyświetlania niczego poza obrazem jako ekranu powitalnego od razu po wyjęciu z pudełka, więc będziemy musieli stworzyć Window
które będzie służyć jako ekran powitalny. Zakładamy, że stworzyliśmy już projekt zawierający klasę MainWindow
, która ma być głównym oknem aplikacji.
Po pierwsze dodajemy okno SplashScreenWindow
do naszego projektu:
<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>
Następnie zastępujemy metodę Application.OnStartup
, aby wyświetlić ekran powitalny, trochę popracować i wreszcie wyświetlić okno główne ( 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();
});
});
}
}
Na koniec musimy zadbać o domyślny mechanizm, który pokazuje MainWindow
podczas uruchamiania aplikacji. Wszystko, co musimy zrobić, to usunąć StartupUri="MainWindow.xaml"
z głównego znacznika Application
w pliku App.xaml .
Tworzenie okna powitalnego z raportowaniem postępu
WPF nie obsługuje wyświetlania niczego poza obrazem jako ekranu powitalnego od razu po wyjęciu z pudełka, więc będziemy musieli stworzyć Window
które będzie służyć jako ekran powitalny. Zakładamy, że stworzyliśmy już projekt zawierający klasę MainWindow
, która ma być głównym oknem aplikacji.
Po pierwsze dodajemy okno SplashScreenWindow
do naszego projektu:
<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>
Następnie udostępniamy właściwość klasy SplashScreenWindow
, abyśmy mogli łatwo zaktualizować bieżącą wartość postępu ( SplashScreenWindow.xaml.cs ):
public partial class SplashScreenWindow : Window
{
public SplashScreenWindow()
{
InitializeComponent();
}
public double Progress
{
get { return progressBar.Value; }
set { progressBar.Value = value; }
}
}
Następnie zastąpimy metodę Application.OnStartup
, aby wyświetlić ekran powitalny, trochę popracować i wreszcie wyświetlić okno główne ( 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();
});
});
}
}
Na koniec musimy zadbać o domyślny mechanizm, który pokazuje MainWindow
podczas uruchamiania aplikacji. Wszystko, co musimy zrobić, to usunąć StartupUri="MainWindow.xaml"
z głównego znacznika Application
w pliku App.xaml .