每一款商業的Silverlight項目,爲了體現項目個性化,都會有不同的界面設計,項目UI設計的第一步就是創建個性的自定義啓動畫面,本文將介紹如何創建Silverlight自定義啓動畫面,也就是經常說的Splash Screen.
Silverlight初始化建立啓動畫面如下圖:
經過修改,將改如下圖:
根據上圖我們可以看出,該啓動畫面分爲三個部分,圖片部分,進度條部分,百分比部分,對於圖片部分,以後我們將修改爲動畫圖片,現在着重介紹進度條和百分比部分。
1. 首先,使用文本工具創建一個空文件,命名爲“SplashScreen.xaml”,該文檔是爲了承載自定義啓動畫面的控件代碼所用,由於我們創建自定義啓動畫面,需要覆蓋替換原始啓動畫面,爲了不讓該文件封裝到XAP包中,我們使用其他文本工具先創建一個獨立的空文件。文件創建後,可以使用VS2008或者Blend添加到項目中。
2. 現在可以使用VS2008或者Blend打開SplashScreen.xaml文件,填寫以下代碼:
2 xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
3 VerticalAlignment="Center" Margin="0,100,0,0">
4 <!--頭部圖片-->
5 <Image x:Name="myImage" Source="/silverlightchina.png"
6 Height="56"
7 Width="220"
8 HorizontalAlignment="Center"
9 VerticalAlignment="Center"
10 Margin="10" />
11
12 <StackPanel HorizontalAlignment="Center">
13 <!--進度條-->
14 <Grid HorizontalAlignment="Center">
15 <Rectangle Stroke="#FFDEE6F0" HorizontalAlignment="Left" Width="300" Height="10" RadiusX="2" RadiusY="2" StrokeThickness="1"/>
16 <Rectangle Fill="#FF7E99C8" HorizontalAlignment="Left" VerticalAlignment="Center" StrokeThickness="0" RadiusX="0" RadiusY="0" Width="296" Height="6" x:Name="progressBar" RenderTransformOrigin="0,0.5" Margin="4">
17 <Rectangle.RenderTransform>
18 <ScaleTransform x:Name="progressBarScale" />
19 </Rectangle.RenderTransform>
20 </Rectangle>
21 </Grid>
22
23 <!--百分比-->
24 <Grid HorizontalAlignment="Center">
25 <TextBlock x:Name="progressText" Margin="18,0,17,19" Height="26" Text="0%" FontSize="16" Opacity="0.8" VerticalAlignment="Bottom" TextAlignment="Right"/>
26 <TextBlock x:Name="progressText2" Margin="18,0,7,8" Height="70" Text="0%" FontSize="50" Opacity="0.04" FontWeight="Bold" VerticalAlignment="Bottom" TextAlignment="Right"/>
27 </Grid>
28 </StackPanel>
29 </StackPanel>
代碼中的進度條部分,我們定義了兩個矩形,一個是外部的邊框矩形,一個是內部的進度矩形,通過屬性設置其顯示效果。
百分比部分,我們定義了兩個TextBlock,顯示百分比數值。
3. 在新建的Silverlight項目中,VS2008會自動創建測試頁面CustomizeSplashScreenTestPage.html和CustomizeSplashScreenTestPage.aspx,該測試頁面是通過Object對XAP進行下載和調用,爲了讓Silverlight項目識別自定義啓動畫面,我們需要在OBJECT中添加以下參數,在代碼下載中,我僅修改了CustomizeSplashScreenTestPage.html:
2 <param name="onSourceDownloadProgressChanged" value="onSourceDownloadProgressChanged" />
參數1,splashscreensource是指定自定義啓動畫面文件名;
參數2,onSourceDownloadProgressChanged是一個Javascript函數,在下載XAP文件的時候,Silverlight客戶端會運行該函數,如果需要使用自定義啓動畫面,我們需要創建該函數。
2 function onSourceDownloadProgressChanged(sender, eventArgs) {
3
4 sender.findName("progressText").Text = Math.round(eventArgs.progress * 100) + "%";
5 sender.findName("progressText2").Text = Math.round(eventArgs.progress * 100) + "%";
6 sender.findName("progressBarScale").ScaleX = eventArgs.progress;
7 }
8 </script>
在onSourceDownloadProgressChanged函數中,我們使用sender.findName獲取SplashScreen.xaml文件中的控件屬性,並賦值。 其中eventArgs.progress會返回一個從0到1的數字,該數字表示當前載入進程值。
從onSourceDownloadProgressChanged函數運行,可以確認進度條和百分比的顯示是同步的。
到這裏爲止,我們已經創建了Silverlight自定義啓動窗口。
測試自定義啓動畫面
本地運行Silverlight項目,XAP載入很快,很難正常查看自定義啓動畫面,我們可以使用以下方法,來延緩載入速度,在本地可以測試查看自定義啓動畫面。
1. 首先在客戶端,添加一個大文件,例如視頻,音樂,或者壓縮文件之類的,這裏我添加了一個壓縮文件大概100M。
2. 選中該文件,點擊右鍵編輯屬性,修改Build Action爲Content,這樣,Silverlight編譯的時候,會把該文件封裝到XAP文件中,測試項目的時候,自定義啓動頁面也就能正常查看了。
本文主要介紹了Silverilght非託管代碼的自定義啓動畫面創建,如果想創建Silverlight託管代碼的自定義啓動畫面,可以參考[Silverlight]通過SilverlightLoader使用託管代碼創建自定義載入界面(Splash Screen) 。
對於非託管XAML+js的解決方案,也可以參考MSDN:http://msdn.microsoft.com/zh-cn/library/cc903962(VS.95).aspx