大家是否還記得在Windows Forms程式中如何實現splashScreen嗎?我們一般都會使用Microsoft.VisualBasic.dll中提供的那個WindowsFormsApplicationBase型別,它有一個所謂的splashscreen屬性,可以指定為一個窗體的。
那麼,同樣的需求在WPF中如何實現呢?這要從兩頭來說,從簡單來說,它實在是簡單了。
事實上,這是.NET Framework 3.5sp1的一個特性
考慮到大部分的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));