2010-10-12 6 views
11

Dupont: WPF animated splash screenC'è un modo per mostrare una schermata iniziale per l'applicazione WPF?

Vorrei mostrare una schermata iniziale per la mia applicazione WPF. quello che voglio fare è mostrarlo mentre carico il dizionario da un file (ci vogliono circa 5-6 secondi per caricarlo). C'è un modo per ottenere questo in WPF? Gradirei qualche tutorial, poiché questo è un po 'più complicato delle altre domande che ho postato.

+0

possibile duplicato del [WPF splash screen animato] (http://stackoverflow.com/questions/3677653/wpf-animated-splash-screen) –

risposta

12

Vedi WPF 3.5 SP1: Splash Screen

o entro VS2010 click sul Solution Explorer fare Add -> New Item, selezionare WPF dall'elenco dei modelli installati e Splash Screen dovrebbe essere sul fondo della lista nel mezzo.

Nota: la schermata iniziale viene rimossa dopo il costruttore e prima/quando la richiamata della finestra principale è Window_Loaded. Ho spostato tutta la mia inizializzazione nel costruttore della finestra principale e funziona a meraviglia, ed è molto semplice.

+0

penso che non posso controllare per quanto tempo spruzzi verrà mostrato (il tempo predefinito possibile è 0,5 secondi, o qualcosa del genere). Quello che mi piacerebbe ottenere è quello di mostrare splash, mentre caricare alcuni dati (5-6 secondi). – sokolovic

+0

la schermata iniziale viene rimossa dopo la funzione di costruzione e quando viene richiamata la finestra principale Window_Loaded. Ho spostato tutta la mia inizializzazione nel costruttore della finestra principale e funziona a meraviglia, ed è molto semplice. –

+0

Ok, funziona. Grazie! :) – sokolovic

7

Risposta breve: Aggiungi -> Nuovo elemento -> Schermata iniziale. Scarica un PNG nel progetto - basta modificarlo. nota che supporta full alpha transparencey quindi può contenere ombre esterne, ecc ...

+0

Sebbene questo sia utile per alcuni scenari, il problema principale con SplashScreen è che non supporta il contenuto dinamico (poiché l'immagine è raggruppata in fase di compilazione). Se si desidera visualizzare la barra di avanzamento nella schermata iniziale o anche la versione dell'applicazione, è necessario creare una finestra WPF standard. Sul lato positivo, le schermate iniziali create con questo metodo vengono caricate più velocemente perché non richiede il caricamento del framework. – dotNET

+0

@dotNET Sì, è sempre un compromesso. In passato, ho creato un nuovo handle di finestra e ho eseguito direttamente il dipinto, il che significava che avrei potuto implementare una barra di avanzamento senza bisogno di winform/wpf per terminare il caricamento. È stato molto veloce e potente (potrebbe essere alpha, click-through, ecc.) Ma piuttosto inflessibile poiché stavi implementando nuovamente la funzionalità dell'interfaccia utente per ogni controllo che volevi rendere e dovevi gestire in modo efficace l'invalidazione/il sovrascrittura. – Basic

16

Uno SplashScreen è in realtà solo un'altra finestra senza bordi e non è ridimensionabile (né puoi interagire con esso in alcun modo). Probabilmente vorrai nasconderlo dalla barra delle applicazioni, centrarlo sullo schermo, ecc. Gioca con varie impostazioni fino a ottenere l'effetto desiderato.

Ecco una rapida che ho sbattuto in circa 5 minuti per dimostrare la teoria:

<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> 

Avanti, modificare il file App.xaml per rimuovere la finestra di avvio, e invece generare l'evento di avvio:

<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> 

E nel code-behind, gestire l'evento Application_Startup nel modo che si ritiene migliore. Per esempio:

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

Dispari di scendere in rassegna una risposta di 5 anni senza alcuna spiegazione. –

+1

Utile per le persone senza il modello splashcreen installato in VS. – TwinPrimesAreEz

Problemi correlati