2010-10-12 15 views
11

Dupe: WPF animated splash screen¿Hay alguna manera de mostrar una pantalla de bienvenida para la aplicación WPF?

Me gustaría mostrar una pantalla de bienvenida para mi aplicación WPF. lo que quiero hacer es mostrarlo mientras cargo el diccionario desde un archivo (tarda aproximadamente 5-6 segundos en cargarse). ¿Hay alguna manera de lograr esto en WPF? Agradecería un tutorial, ya que es un poco más complicado que otras preguntas que publiqué.

+0

posible duplicado de [WPF pantalla de presentación animada] (http://stackoverflow.com/questions/3677653/wpf-animated-splash-screen) –

Respuesta

12

Ver WPF 3.5 SP1: Splash Screen

o dentro de VS2010 clic en el Solution Explorer hacer Add -> New Item, seleccionar WPF de la lista de plantillas instaladas y Splash Screen debe estar en la parte inferior de la lista en el medio.

Nota: La pantalla de bienvenida se elimina después del constructor y antes/cuando la ventana principal Window_Loaded devuelve la devolución de llamada. Trasladé toda mi inicialización al constructor de la ventana principal y funciona de maravilla, y es muy fácil.

+0

Creo que no puedo controlar por cuánto tiempo salpicaduras se mostrará (el tiempo predeterminado posible es 0.5 segundos o algo así). Lo que me gustaría lograr es mostrar splash, MIENTRAS carga algunos datos (5-6 segundos). – sokolovic

+0

la pantalla de bienvenida se elimina después del constructor y cuando la ventana principal devuelve la llamada a Window_Loaded. Trasladé toda mi inicialización al constructor de la ventana principal y funciona de maravilla, y es muy fácil. –

+0

Ok, funciona. ¡Gracias! :) – sokolovic

7

Respuesta corta: Agregar -> Nuevo elemento -> Pantalla de bienvenida. Vacia un PNG en el proyecto, solo modifícalo. Tenga en cuenta que es compatible con la transparencia alfa completa, por lo que puede contener sombras, etc.

+0

Si bien esto es útil para algunos escenarios, el principal problema con SplashScreen es que no admite contenido dinámico (ya que la imagen se incluye en tiempo de compilación). Si desea mostrar la barra de progreso en su pantalla de inicio, o incluso la versión de la aplicación, debe crear una ventana WPF estándar. En el lado positivo, las pantallas de bienvenida creadas con este método se cargan más rápido porque no requiere que se cargue el marco. – dotNET

+0

@dotNET Sí, siempre es una solución de compromiso. En el pasado, creé un nuevo identificador de ventana y realicé la pintura directamente, lo que significaba que podía implementar una barra de progreso sin necesidad de winforms/wpf para terminar de cargar. Fue muy rápido y potente (podría ser alfa, click-through, etc.) pero bastante inflexible ya que estaba implementando nuevamente la funcionalidad UI para cada control que quería representar, y tuvo que manejar la invalidación/sobregiro de manera eficiente. – Basic

16

SplashScreen es en realidad otra ventana sin borde y no se puede cambiar de tamaño (ni puede interactuar con ella de ninguna manera). Probablemente quieras esconderlo de la barra de tareas, centrarlo en la pantalla, etc. Juega con varias configuraciones hasta que obtengas el efecto que deseas.

Aquí hay una rápida me prepararon rápidamente en unos 5 minutos para probar la teoría:

<Window x:Class="MyWhateverApp.MySplashScreen" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     ShowInTaskbar="False" 
     ResizeMode="NoResize" 
     WindowStartupLocation="CenterScreen" 
     WindowStyle="None" 
     Background="Transparent" 
     AllowsTransparency="True" 
     Title="Sandbox Splash Screen" 
     SizeToContent="Width" 
     Topmost="True" 
     Height="{Binding RelativeSource={RelativeSource Self}, 
         Path=ActualWidth}"> 

    <Border CornerRadius="8" Margin="15"> 
     <Border.Background> 
      <ImageBrush ImageSource="Resources\sandtexture.jpeg" 
         Stretch="Fill" /> 
     </Border.Background> 
     <Border.Effect> 
      <DropShadowEffect Color="#894F3B" 
           BlurRadius="10" 
           Opacity="0.75" 
           ShadowDepth="15" /> 
     </Border.Effect> 

     <TextBlock FontSize="40" 
        FontFamily="Bauhaus 93" 
        Foreground="White" 
        Margin="10" 
        VerticalAlignment="Center" 
        HorizontalAlignment="Center" 
        Text="WPF 3.5 Sandbox"> 
      <TextBlock.Effect> 
       <DropShadowEffect Color="Black" /> 
      </TextBlock.Effect> 
     </TextBlock>   
    </Border> 
</Window> 

A continuación, modificar el archivo App.xaml para eliminar la ventana de inicio, y en lugar de provocar el evento de inicio:

<Application x:Class="MyWhateverApp.App" 
      xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
      xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
      Startup="Application_Startup"> 
    <Application.Resources> 

    </Application.Resources> 
</Application> 

Y en el código subyacente, maneje el evento Application_Startup de la manera que crea que es mejor. Por ejemplo:

Window1 mainWindow = null; 

private void Application_Startup(object sender, StartupEventArgs e) 
{ 
    MySplashScreen splash = new MySplashScreen(); 
    splash.Show(); 
    mainWindow = new Window1(); 
    mainWindow.Show(); 
    splash.Close(); 
} 
+0

Es extraño votar por una respuesta de 5 años, sin explicación. –

+1

Útil para personas sin la plantilla de pantalla integrada instalada en VS – TwinPrimesAreEz

Cuestiones relacionadas