2010-10-12 90 views
11

複製代碼:WPF animated splash screen有沒有辦法顯示WPF應用程序的啓動畫面?

我想爲我的WPF應用程序顯示啓動畫面。 我想要做的是顯示它,而我從文件加載字典(大約需要5-6秒加載)。有沒有辦法在WPF中實現這一點?我會很感激一些教程,因爲這比我發佈的其他問題稍微複雜一些。

+0

可能重複[WPF動畫閃屏(http://stackoverflow.com/questions/3677653/wpf-animated-splash-screen) – 2010-10-12 11:44:06

回答

12

WPF 3.5 SP1: Splash Screen

或者在Solution Explorer VS2010點擊內完成Add -> New Item,從已安裝的模板和Splash Screen列表中選擇WPF應該放在中間的列表的底部。

注意:啓動畫面在構造函數和主窗口Window_Loaded回調之前/之後被移除。我將所有的初始化都移到了主窗口構造函數中,並且它很有用,而且非常簡單。

+0

我想,我不能多長時間閃控制會顯示(可能的默認時間是0.5秒,或類似的東西)。我想實現的是顯示飛濺,而加載一些數據(5-6秒)。 – sokolovic 2010-10-12 11:59:26

+0

啓動畫面在構造函數和主窗口Window_Loaded回調之後被移除。我將所有的初始化都移到了主窗口構造函數中,並且它很有用,而且非常簡單。 – 2010-10-12 17:10:00

+0

好的,它的工作原理。謝謝! :) – sokolovic 2010-10-13 14:50:38

7

簡答題:添加 - >新建項目 - >啓動畫面。它在項目中轉儲了一個PNG - 只需修改它即可。請注意,它支持完整的alpha透明度,所以可以包含陰影等等。

+0

雖然這對於某些場景很有用,但SplashScreen的主要問題是它不支持動態內容(因爲圖像在編譯時捆綁在一起)。如果您想在啓動畫面或應用程序版本上顯示進度條,則必須創建一個標準的WPF窗口。從積極的方面來看,使用此方法創建的啓動畫面加載速度更快,因爲它不需要加載框架。 – dotNET 2017-06-11 14:05:07

+0

@dotNET是的,它總是一個權衡。在過去,我創建了一個新的窗口句柄並直接執行繪畫,這意味着我可以實現一個進度條而無需winforms/wpf來完成加載。非常快速且功能強大(可以是alpha,點擊等),但卻非常不靈活,因爲您要爲要渲染的每個控件重新實現UI功能,並且必須高效地處理失效/透支。 – Basic 2017-06-11 18:53:42

16

SplashScreen實際上就是另一個沒有邊框的窗口,它不能調整大小(也不能以任何方式與它進行交互)。你可能想要將它從任務欄中隱藏起來,將它置於屏幕上,等等。使用各種設置來玩,直到獲得你想要的效果。

這裏有一個快速的一個我大約5分鐘颳起了證明的理論:

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

下一步,修改你的App.xaml文件刪除啓動窗口,而是提高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> 

而在代碼隱藏中,以任何您認爲最好的方式處理Application_Startup事件。例如:

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

奇怪的是,在一個5歲的答案中被拒絕投票,沒有任何解釋。 – 2015-09-09 13:30:21

+1

對於沒有在VS中安裝splashscreen模板的人有用 – TwinPrimesAreEz 2015-11-30 15:27:29

相關問題