wpf
Creando la pantalla de bienvenida en WPF
Buscar..
Introducción
Añadiendo pantalla de bienvenida simple
Siga estos pasos para agregar la pantalla de bienvenida a la aplicación WPF en Visual Studio:
- Cree u obtenga cualquier imagen y agréguela a su proyecto (por ejemplo, dentro de la carpeta Imágenes ):
- Abra la ventana de propiedades para esta imagen ( Ver → Ventana de propiedades ) y cambie la configuración de la acción de compilación al valor de SplashScreen :
- Ejecutar la aplicación. Verá la imagen de la pantalla de inicio en el centro de la pantalla antes de que aparezca la ventana de la aplicación (después de que aparezca la ventana, la imagen de la pantalla de inicio se desvanecerá en unos 300 milisegundos).
Prueba de pantalla de bienvenida
Si su aplicación es liviana y simple, se iniciará muy rápido y con una velocidad similar aparecerá y desaparecerá la pantalla de bienvenida.
Tan pronto como la pantalla de inicio desaparezca después de que se complete el método Application.Startup
, puede simular el retraso de inicio de la aplicación siguiendo estos pasos:
- Abrir el archivo App.xaml.cs
- Agregar usando el espacio de nombres
using System.Threading;
-
OnStartup
métodoOnStartup
y agregueThread.Sleep(3000);
dentro de eso:
El código debería verse como:
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);
}
}
}
- Ejecutar la aplicación. Ahora se iniciará durante unos 3 segundos más, por lo que tendrá más tiempo para probar su pantalla de inicio.
Creando ventana de pantalla de bienvenida personalizada
WPF no admite la visualización de nada más que una imagen como una pantalla de inicio, así que tendremos que crear una Window
que servirá como pantalla de inicio. Suponemos que ya hemos creado un proyecto que contiene la clase MainWindow
, que será la ventana principal de la aplicación.
En primer lugar, agregamos una ventana SplashScreenWindow
a nuestro proyecto:
<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>
Luego, anulamos el método Application.OnStartup
para mostrar la pantalla de inicio , realizar algún trabajo y finalmente mostrar la ventana principal ( 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();
});
});
}
}
Por último, debemos cuidar el mecanismo predeterminado que muestra MainWindow
en el inicio de la aplicación. Todo lo que necesitamos hacer es eliminar el StartupUri="MainWindow.xaml"
de la etiqueta de la Application
raíz en el archivo App.xaml .
Creación de la ventana de la pantalla de bienvenida con informes de progreso
WPF no admite la visualización de nada más que una imagen como una pantalla de inicio, así que tendremos que crear una Window
que servirá como pantalla de inicio. Suponemos que ya hemos creado un proyecto que contiene la clase MainWindow
, que será la ventana principal de la aplicación.
En primer lugar, agregamos una ventana SplashScreenWindow
a nuestro proyecto:
<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>
Luego exponemos una propiedad en la clase SplashScreenWindow
para que podamos actualizar fácilmente el valor de progreso actual ( SplashScreenWindow.xaml.cs ):
public partial class SplashScreenWindow : Window
{
public SplashScreenWindow()
{
InitializeComponent();
}
public double Progress
{
get { return progressBar.Value; }
set { progressBar.Value = value; }
}
}
A continuación, anulamos el método Application.OnStartup
para mostrar la pantalla de inicio , realizar algún trabajo y finalmente mostrar la ventana principal ( 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();
});
});
}
}
Por último, debemos cuidar el mecanismo predeterminado que muestra MainWindow
en el inicio de la aplicación. Todo lo que necesitamos hacer es eliminar el StartupUri="MainWindow.xaml"
de la etiqueta de la Application
raíz en el archivo App.xaml .