2010-10-12 21 views
11

Dupe: WPF animated splash screenCzy jest jakiś sposób, aby pokazać ekran powitalny dla aplikacji WPF?

Chciałbym pokazać ekran powitalny dla mojej aplikacji WPF. co chcę zrobić, to pokazać, gdy ładuję słownik z pliku (ładowanie zajmuje około 5-6 sekund). Czy istnieje sposób na osiągnięcie tego w WPF? Byłbym wdzięczny za kilka tutoriali, ponieważ jest to nieco bardziej skomplikowane niż inne pytania, które napisałem.

+0

możliwe duplikat [WPF ekran powitalny animowane] (http://stackoverflow.com/questions/3677653/wpf-animated-splash-screen) –

Odpowiedz

12

Zobacz WPF 3.5 SP1: Splash Screen

lub wewnątrz VS2010 kliknięcie na Solution Explorer zrobić Add -> New Item wybierz WPF z listy zainstalowanych szablonów i Splash Screen powinny znajdować się na dole listy w środku.

Uwaga: Ekran powitalny jest usuwany po konstruktorze i przed/po wywołaniu okna głównego. Przeniosłem całą moją inicjalizację do głównego konstruktora okna i działa to przyjemnie i jest bardzo łatwe.

+0

myślę, że nie można kontrolować, jak długo powitalny zostanie wyświetlony (możliwy domyślny czas to 0,5 sekundy lub coś podobnego). Co chciałbym osiągnąć to pokazać splash, GDY ładuje jakieś dane (5-6 sekund). – sokolovic

+0

ekran powitalny jest usuwany po konstruktorze i po głównym oknie wywołania zwrotnego Window_Loaded. Przeniosłem całą moją inicjalizację do głównego konstruktora okna i działa to przyjemnie i jest bardzo łatwe. –

+0

OK, działa. Dzięki! :) – sokolovic

7

Krótka odpowiedź: Dodaj -> Nowa pozycja -> Ekran powitalny. Zrzuca on plik PNG w projekcie - wystarczy go zmodyfikować. Zwróć uwagę, że obsługuje on pełną przezroczystość alfa, więc może zawierać cienie, itp.

+0

Chociaż jest to użyteczne w niektórych scenariuszach, głównym problemem z SplashScreen jest to, że nie obsługuje on zawartości dynamicznej (ponieważ obraz jest dołączany podczas kompilacji). Jeśli chcesz wyświetlać pasek postępu na ekranie powitalnym lub nawet wersję aplikacji, musisz utworzyć standardowe okno WPF. Z drugiej strony, ekrany powitalne utworzone za pomocą tej metody ładują się szybciej, ponieważ nie wymagają ładowania ram. – dotNET

+0

@dotNET Tak, to zawsze kompromis. W przeszłości stworzyłem nowy uchwyt okna i wykonałem obraz bezpośrednio, co oznaczało, że mogłem zaimplementować pasek postępu bez konieczności stosowania WinForm/WpF, aby zakończyć ładowanie. Był bardzo szybki i potężny (mógł alfa, click-through, itp.), Ale dość nieelastyczny, ponieważ ponownie wdrażałeś funkcje interfejsu użytkownika dla każdego kontrolowanego obiektu, który chciałeś renderować, i musiałeś efektywnie radzić sobie z unieważnieniem/przeciążeniem. – Basic

16

A SplashScreen to tak naprawdę kolejne okno bez ramki i nie można go zmienić (ani w żaden sposób z nim nie współdziałać). Prawdopodobnie chcesz go ukryć na pasku zadań, wyśrodkować na ekranie itd. Graj z różnymi ustawieniami, aż uzyskasz odpowiedni efekt.

Oto krótki jeden ja bita w około 5 minut, aby udowodnić teorię:

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

Następnie zmodyfikować plik App.xaml usunąć okno uruchamiania i zamiast podnieść zdarzenie Startup:

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

W kodzie z tyłu obsłużyć zdarzenia Application_Startup w sposób, który uważasz za najlepszy. Na przykład:

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

Nieparzysty, aby uzyskać głosowanie oddane na 5-letnią odpowiedź, bez wyjaśnienia. –

+1

Przydatny dla osób, które nie mają zainstalowanego szablonu powitania w VS – TwinPrimesAreEz

Powiązane problemy