1. 程式人生 > >WPF:如何為程序添加splashScreen?

WPF:如何為程序添加splashScreen?

ont msd color soft fig 發生 collect writer part

原文:WPF:如何為程序添加splashScreen?

大家是否還記得在Windows Forms程序中如何實現splashScreen嗎?我們一般都會使用Microsoft.VisualBasic.dll中提供的那個WindowsFormsApplicationBase類型,它有一個所謂的splashscreen屬性,可以指定為一個窗體的。

那麽,同樣的需求在WPF中如何實現呢?這要從兩頭來說,從簡單來說,它實在是簡單了。

事實上,這是.NET Framework 3.5sp1的一個特性

http://blogs.msdn.com/jgoldb/archive/2008/08/12/what-s-new-in-wpf-3-5-sp1-splash-screen-to-improve-perceived-startup-perf.aspx

考慮到大部分的splashscreen其實都只是一個圖片,所以最簡單的做法是,先導入一張圖片,然後設置它的生成操作為“splash screen”

技術分享圖片

註意,其他什麽都不要做,此時運行程序的話,就可以看到效果

技術分享圖片

註意:雖然我們的圖片是gif的格式,但顯示出來的效果卻是靜態的。

那麽,到底發生了什麽,讓他具有了這個特性呢?我們可以打開項目的文件,就是那個csproj文件

技術分享圖片

原來它是通過在項目文件中聲明一個SplashScreen來實現的。

[註意]這個文件是給msbuild這個工具用的。

[思考]所以試想一下,一個應用程序是否可以有多個SplashScreen呢?

同時,我們還可以打開IL代碼來了解一下,

技術分享圖片

從上面的il代碼可以很直觀地看出來,其實它是先實例化了一個SplashScreen,然後調用了它的Show方法而已。

如果是這樣的話,我們當然也可以自己寫代碼來實現

首先,讓我們將圖片的生成操作修改為“嵌入的資源”

技術分享圖片

然後通過下面的代碼就可以實現功能

using System;
using System.Collections.Generic;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Windows;

namespace WpfApplication1
{
    /// <summary>
/// App.xaml 的交互邏輯 /// </summary> public partial class App : Application { protected override void OnStartup(StartupEventArgs e) { SplashScreen s = new SplashScreen("20080320132823923.gif"); s.Show(true); base.OnStartup(e); } } }

值得一提的是,目前看來,也沒有辦法加載一個窗口作為SplashScreen。

如果希望閃屏至少顯示多少時間,則可以考慮下面的代碼

            SplashScreen s = new SplashScreen("20080320132823923.gif");
            s.Show(false);
            s.Close(new TimeSpan(0, 0, 10));

WPF:如何為程序添加splashScreen?