教你打造Silverlight超酷翻页实例
經常閱讀電子雜志的朋友對其流暢自然的翻頁過渡效果應當留下了十分深刻的印象。這些雜志都是使用Flash技術制作而成的。總想著能用Silverlight實現這樣的效果,去網上查查資料,找到了一個微軟官方提供的翻頁效果例子(教程說明點這里,在線實例演示及源代碼下載點這里)。這里再推薦一個外國網站的Silverlight翻頁在線實例。
?
?
?
效果是十分的贊,只可惜控制的邏輯是用JavaScript代碼實現的,這就不利于程序邏輯的整體控制。筆者最近在CodePlex上,找到了一個開源的翻頁控件WPF and Silverlight BookControls(點這里進入),用它進行Silverlight翻頁效果的開發就顯得十分得心應手了。下面就向大家一步一步地介紹Silverlight翻頁效果的實現過程。
?
導航:
①建立翻頁項目解決方案
②添加必要文件
③構建應用程序界面
④設置應用程序控制邏輯
⑤最終效果圖
?
1、建立翻頁項目解決方案
點擊File->Projects...菜單選項,新建一個ASP.NET Web Application。
?
?
將新建工程名稱命名為FlipPage。
?
?
在解決方案下繼續添加一個Silverlight應用程序項目,將該工程命名為SilverlightClient。
?
?
在彈出的對話框中,直接點OK按鈕。
?
?
點擊一下“全部保存”按鈕,完成項目工程的創建。
?
2、添加必要文件
在SilverlightClient項目文件夾下,新建一個名為Dll的文件夾,在里面放入WPF and Silverlight BookControls的動態鏈接庫文件SLMitsuControls.dll(如下圖)。在FlipPage項目文件夾下,新建一個名為mediaPictures的子文件夾,在里面放入將在書中顯示的圖片,如下圖所示命名。同樣的,在SilverlightClient項目文件夾下,新建一個名為PageType的文件夾,然后再新建兩個類分別命名為LeftPage.cs和RightPage.cs(如下圖),它們分別代表了書的偶數和奇數頁面,具體代碼如下所示(詳細的說明請見代碼注釋)。
?
????????????
?
?
LeftPage.cs文件代碼:
Codeusing?System;
using?System.Net;
using?System.Windows;
using?System.Windows.Controls;
using?System.Windows.Documents;
using?System.Windows.Ink;
using?System.Windows.Input;
using?System.Windows.Media;
using?System.Windows.Media.Animation;
using?System.Windows.Media.Imaging;
using?System.Windows.Shapes;
namespace?SilverlightClient.TypePage?
{
??public?class?LeftPage?:?Canvas?
??{
????//定義將在頁面上顯示的元素
????private?Image?imgPhoto;
????private?Button?btnPrevious;
????private?Rectangle?RecBorder;
????private?TextBlock?PageNum;
????
????//構造函數
????public?LeftPage()
????{
??????//頁面的設置
??????this.Width?=?452;
??????this.Height?=?630;
??????this.Background?=?new?SolidColorBrush(Colors.White);
??????Canvas.SetLeft(this,?0);
??????Canvas.SetTop(this,?0);
??????//頁面邊框的設置
??????RecBorder?=?new?Rectangle();
??????RecBorder.Width?=?452;
??????RecBorder.Height?=?630;
??????Canvas.SetLeft(RecBorder,?0);//設置頁面邊框在Canvas中的位置,下同。
??????Canvas.SetTop(RecBorder,?0);
??????RecBorder.Stroke?=?new?SolidColorBrush(Colors.Black);
??????RecBorder.StrokeThickness?=?0;
??????this.Children.Add(RecBorder);
??????//照片的設置
??????imgPhoto?=?new?Image();
??????imgPhoto.Width?=?450;
??????imgPhoto.Height?=?600;
??????Canvas.SetLeft(imgPhoto,?1);
??????Canvas.SetTop(imgPhoto,?1);
??????this.Children.Add(imgPhoto);
??????//“前一頁”按鈕的設置
??????btnPrevious?=?new?Button();
??????btnPrevious.Width?=?150;
??????btnPrevious.Height?=?20;
??????btnPrevious.Content?=?"<<?前一頁";
??????btnPrevious.HorizontalContentAlignment?=?HorizontalAlignment.Center;
??????btnPrevious.VerticalContentAlignment?=?VerticalAlignment.Center;
??????btnPrevious.Cursor?=?Cursors.Hand;
??????Canvas.SetLeft(btnPrevious,?151);
??????Canvas.SetTop(btnPrevious,?605);
??????this.Children.Add(btnPrevious);
??????//頁碼文本的設置
??????PageNum?=?new?TextBlock();
??????PageNum.Width?=?100;
??????PageNum.Height?=?20;
??????PageNum.Text?=?"00?/?00";
??????PageNum.TextAlignment?=?TextAlignment.Left;
??????PageNum.VerticalAlignment?=?VerticalAlignment.Center;
??????PageNum.FontFamily?=?new?FontFamily("Comic?sans?MS");
??????Canvas.SetLeft(PageNum,?10);
??????Canvas.SetTop(PageNum,?607);
??????this.Children.Add(PageNum);
????}
????//設置圖片路徑
????public?void?setterimgPhoto(string?path)
????{
??????BitmapImage?btm?=?new?BitmapImage();
??????btm.UriSource?=?new?Uri(path,?UriKind.Relative);
??????imgPhoto.Source?=?btm;
????}
????//設置按鈕是否可見
????public?void?setterDisplayBtnPrevious(bool?YesNo)
????{
??????if?(YesNo)
??????{
????????btnPrevious.Visibility?=?Visibility.Visible;
??????}
??????else?{
????????btnPrevious.Visibility?=?Visibility.Collapsed;
??????}
????}
????//設置頁碼
????public?void?setterPageNumber(string?currentPageNum,?string?TotalPageNum)?{
????????PageNum.Text?=?currentPageNum?+?"?/?"?+?TotalPageNum;
????}
????//返回按鈕單擊事件關聯
????public?Button?getbtnPrevious()
????{
??????return?btnPrevious;
????}
??}
}
?
RightPage.cs文件代碼:
?
Codeusing?System;
using?System.Net;
using?System.Windows;
using?System.Windows.Controls;
using?System.Windows.Documents;
using?System.Windows.Ink;
using?System.Windows.Input;
using?System.Windows.Media;
using?System.Windows.Media.Animation;
using?System.Windows.Media.Imaging;
using?System.Windows.Shapes;
namespace?SilverlightClient.TypePage?
{
??public?class?RightPage?:?Canvas?
??{
????//定義將在頁面上顯示的元素
????private?Image?imgPhoto;
????private?Button?btnNext;
????private?Rectangle?RecBorder;
????private?TextBlock?PageNum;
????
????//構造函數
????public?RightPage()
????{
??????//頁面的設置
??????this.Width?=?452;
??????this.Height?=?630;
??????this.Background?=?new?SolidColorBrush(Colors.White);
??????Canvas.SetLeft(this,?0);//設置頁面邊框在Canvas中的位置,下同。
??????Canvas.SetTop(this,?0);
??????//頁面邊框的設置
??????RecBorder?=?new?Rectangle();
??????RecBorder.Width?=?452;
??????RecBorder.Height?=?630;
??????Canvas.SetLeft(RecBorder,?0);
??????Canvas.SetTop(RecBorder,?0);
??????RecBorder.Stroke?=?new?SolidColorBrush(Colors.Black);
??????RecBorder.StrokeThickness?=?0;
??????this.Children.Add(RecBorder);
??????//照片的設置
??????imgPhoto?=?new?Image();
??????imgPhoto.Width?=?450;
??????imgPhoto.Height?=?600;
??????Canvas.SetLeft(imgPhoto,?1);
??????Canvas.SetTop(imgPhoto,?1);
??????this.Children.Add(imgPhoto);
??????//“后一頁”按鈕的設置
??????btnNext?=?new?Button();
??????btnNext.Width?=?150;
??????btnNext.Height?=?20;
??????btnNext.Content?=?"后一頁?>>";
??????btnNext.HorizontalContentAlignment?=?HorizontalAlignment.Center;
??????btnNext.VerticalContentAlignment?=?VerticalAlignment.Center;
??????btnNext.Cursor?=?Cursors.Hand;
??????Canvas.SetLeft(btnNext,?151);
??????Canvas.SetTop(btnNext,?605);
??????this.Children.Add(btnNext);
??????//頁碼文本的設置
??????PageNum?=?new?TextBlock();
??????PageNum.Width?=?100;
??????PageNum.Height?=?20;
??????PageNum.Text?=?"00?/?00";
??????PageNum.TextAlignment?=?TextAlignment.Right;
??????PageNum.VerticalAlignment?=?VerticalAlignment.Center;
??????PageNum.FontFamily?=?new?FontFamily("Comic?sans?MS");
??????Canvas.SetLeft(PageNum,?340);
??????Canvas.SetTop(PageNum,?607);
??????this.Children.Add(PageNum);
????}
????//設置圖片路徑
????public?void?setterimgPhoto(string?path)
????{
????????BitmapImage?btm?=?new?BitmapImage();
????????btm.UriSource?=?new?Uri(path,?UriKind.Relative);
????????imgPhoto.Source?=?btm;
????}
????//設置按鈕是否可見
????public?void?setterDisplayBtnNext(bool?YesNo)
????{
????????if?(YesNo)
????????{
????????????btnNext.Visibility?=?Visibility.Visible;
????????}
????????else
????????{
????????????btnNext.Visibility?=?Visibility.Collapsed;
????????}
????}
????//設置頁碼
????public?void?setterPageNumber(string?currentPageNum,?string?TotalPageNum)
????{
????????PageNum.Text?=?currentPageNum?+?"?/?"?+?TotalPageNum;
????}
????//返回按鈕單擊事件關聯
????public?Button?getbtnNext()
????{
????????return?btnNext;
????}
??}
}
?
3、構建應用程序界面
詳細的說明請見代碼注釋。
MainPage.xaml文件代碼:
Code
<UserControl?x:Class="SilverlightClient.MainPage"
????xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"?
????xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
????xmlns:d="http://schemas.microsoft.com/expression/blend/2008"?xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
????xmlns:local="clr-namespace:SLMitsuControls;assembly=SLMitsuControls"?????????
????mc:Ignorable="d"?d:DesignWidth="640"?d:DesignHeight="480"?Loaded="UserControl_Loaded">
??<Grid?x:Name="LayoutRoot">
??????<Canvas?x:Name="layout"?Background="White"?Width="906"?Height="630"?Canvas.Left="0"?Canvas.Top="0">
????????<!--顯示層-->??
????????<Canvas?x:Name="canvasBook"?Background="White"?Width="906"?Height="630"?Canvas.Left="0"?Canvas.Top="0"?Visibility="Collapsed">
????????????<local:UCBook?x:Name="book"?Width="906"?Height="630"?Canvas.Left="0"?Canvas.Top="0"?/><!--BookControl-->
????????</Canvas>
????????<!--加載層-->
????????<Canvas?x:Name="canvChanging"?Width="500"?Height="75"?Canvas.Left="200"?Canvas.Top="250"?Visibility="Collapsed"?Background="Transparent">
????????????<TextBlock?x:Name="changingText"?Text="頁面加載中"?Width="200"?Height="30"?Canvas.Left="0"?Canvas.Top="0"?FontFamily="comic?sans?ms"?FontSize="14"></TextBlock>
????????????<ProgressBar?x:Name="changingProgressBar"?Width="500"?Height="30"?Canvas.Left="0"?Canvas.Top="30"></ProgressBar>
????????</Canvas>
??????</Canvas>
??</Grid>
</UserControl>
?
4、設置應用程序控制邏輯
?
詳細的說明請見代碼注釋。
1)MainPage.xaml.cs文件代碼:
Codeusing?System;
using?System.Collections.Generic;
using?System.Linq;
using?System.Net;
using?System.Windows;
using?System.Windows.Controls;
using?System.Windows.Documents;
using?System.Windows.Input;
using?System.Windows.Media;
using?System.Windows.Media.Animation;
using?System.Windows.Media.Imaging;
using?System.Windows.Shapes;
using?System.Threading;
using?SLMitsuControls;
namespace?SilverlightClient
{
????public?partial?class?MainPage?:?UserControl,?IDataProvider
????{
????????//定義全局變量
????????private?List<object>?PageObjectList;//頁面對象列表
????????public?enum?PageType?{?right,?left?};//頁面類型
????????public?string?fileMedia?=?"";//文件媒體
????????public?string?headerPage?=?"";//首頁
????????public?int?maxiPageNum?=?0;//最大頁數
????????public?enum?Location?{?local,?web?};//枚舉應用程序所在
????????public?Location?modeLocation;
????????private?int?pageDownload?=?0;//下載的頁面數
????????private?string?uriResources?=?"";//Uri地址
????????//構造函數
????????public?MainPage()
????????{
????????????InitializeComponent();
????????????PageObjectList?=?new?List<object>();
????????}
????????//UserControl事件觸發處理
????????private?void?UserControl_Loaded(object?sender,?RoutedEventArgs?e)
????????{
????????????if?(modeLocation?==?Location.local)
????????????{
????????????????this.canvChanging.Visibility?=?Visibility.Collapsed;
????????????????this.canvasBook.Visibility?=?Visibility.Visible;
????????????????//填充頁面列表
????????????????FillPagesList();
????????????}
????????????if?(modeLocation?==?Location.web)
????????????{
????????????????this.canvChanging.Visibility?=?Visibility.Visible;
????????????????this.canvasBook.Visibility?=?Visibility.Collapsed;
????????????????//開始下載頁面
????????????????DownloadPages();
????????????}
????????}
????????//開始將頁面填充至List中
????????private?void?FillPagesList()
????????{
????????????//用頁面填充列表
????????????for?(int?xx?=?1;?xx?<=?maxiPageNum;?xx++)
????????????{
????????????????if?(xx?%?2?!=?0)
????????????????{
????????????????????//前一頁即奇數頁
????????????????????AddPageToList(PageType.right,?fileMedia?+?"/"?+?headerPage?+?xx.ToString("00")?+?".jpg",?xx.ToString(),
??????????????????????maxiPageNum.ToString(),?true);
????????????????}
????????????????else
????????????????{
????????????????????//后一頁即偶數頁
????????????????????AddPageToList(PageType.left,?fileMedia?+?"/"?+?headerPage?+?xx.ToString("00")?+?".jpg",?xx.ToString(),
??????????????????????maxiPageNum.ToString(),?true);
????????????????}
????????????}
????????????//移除最后一頁的按鈕
????????????TypePage.RightPage?page?=?PageObjectList[maxiPageNum?-?1]?as?TypePage.RightPage;
????????????page.setterDisplayBtnNext(false);
????????????//為翻頁按鈕指派事件觸發處理
????????????for?(int?xx?=?1;?xx?<?maxiPageNum;?xx++)
????????????{
????????????????if?(xx?%?2?!=?0)
????????????????{
????????????????????//前一頁即奇數頁
????????????????????TypePage.RightPage?pp?=?PageObjectList[xx?-?1]?as?TypePage.RightPage;
????????????????????Button?btnNext?=?pp.getbtnNext();
????????????????????btnNext.Click?+=?new?RoutedEventHandler(btnNext_Click);
????????????????}
????????????????else
????????????????{
????????????????????//后一頁即偶數頁
????????????????????TypePage.LeftPage?pp?=?PageObjectList[xx?-?1]?as?TypePage.LeftPage;
????????????????????Button?btnPrevious?=?pp.getbtnPrevious();
????????????????????btnPrevious.Click?+=?new?RoutedEventHandler(btnPrevious_Click);
????????????????}
????????????}
????????????//為Book設置數據內容
????????????book.SetData(this);
????????}
????????//向頁面列表中添加具體頁面
????????private?void?AddPageToList(PageType?pageType,?string?pathImage,?string?numPage,?string?numMaxiPage,
??????????bool?showBtnYesNo)
????????{
????????????switch?(pageType)
????????????{
????????????????case?PageType.right:
????????????????????TypePage.RightPage?pcd?=?new?SilverlightClient.TypePage.RightPage();
????????????????????pcd.setterimgPhoto(pathImage);
????????????????????pcd.setterPageNumber(numPage,?numMaxiPage);
????????????????????pcd.setterDisplayBtnNext(showBtnYesNo);
????????????????????PageObjectList.Add(pcd);
????????????????????break;
????????????????case?PageType.left:
????????????????????TypePage.LeftPage?pcg?=?new?SilverlightClient.TypePage.LeftPage();
????????????????????pcg.setterimgPhoto(pathImage);
????????????????????pcg.setterPageNumber(numPage,?numMaxiPage);
????????????????????pcg.setterDisplayBtnPrevious(showBtnYesNo);
????????????????????PageObjectList.Add(pcg);
????????????????????break;
????????????}
????????}
????????//“下一頁”按鈕事件觸發處理
????????private?void?btnNext_Click(object?sender,?RoutedEventArgs?e)
????????{
????????????book.AnimateToNextPage(500);
????????}
????????//“上一頁”按鈕事件觸發處理
????????private?void?btnPrevious_Click(object?sender,?RoutedEventArgs?e)
????????{
????????????book.AnimateToPreviousPage(500);
????????}
????????//從網絡上下載頁面
????????private?void?DownloadPages()
????????{
????????????this.canvChanging.Visibility?=?Visibility.Visible;
????????????this.uriResources?=?Application.Current.Host.Source.AbsoluteUri;
????????????int?index?=?uriResources.IndexOf("SilverlightClient.xap");
????????????uriResources?=?uriResources.Substring(0,?index);
????????????this.changingProgressBar.Minimum?=?0;
????????????this.changingProgressBar.Maximum?=?maxiPageNum?-?1;
????????????string?theResources?=?uriResources?+?fileMedia?+?"/"?+?headerPage?+?(pageDownload?+?1).ToString("00")?+?".jpg";
????????????string?theResourcesNum?=?headerPage?+?(pageDownload?+?1).ToString("00")?+?".jpg";
????????????AsynchronouslyDownloadPage(theResources,?theResourcesNum);
????????}
????????//異步下載頁面
????????private?void?AsynchronouslyDownloadPage(string?path,?string?num)
????????{
????????????WebClient?unWeb?=?new?WebClient();
????????????unWeb.DownloadStringCompleted?+=?new?DownloadStringCompletedEventHandler(unWeb_DownloadStringCompleted);
????????????unWeb.DownloadStringAsync(new?Uri(path));
????????????this.changingText.Text?=?"正在下載?:?"?+?num;
????????????this.changingProgressBar.Value?=?this.pageDownload;
????????}
????????//異步下載頁面完成事件觸發處理
????????private?void?unWeb_DownloadStringCompleted(object?sender,?DownloadStringCompletedEventArgs?e)
????????{
????????????this.pageDownload++;
????????????if?(this.pageDownload?<?this.maxiPageNum)//持續不斷下載頁面直到所有頁面都下完
????????????{
????????????????string?theResources?=?uriResources?+?fileMedia?+?"/"?+?headerPage?+?(pageDownload?+?1).ToString("00")?+?".jpg";
????????????????string?theResourcesNum?=?headerPage?+?(pageDownload?+?1).ToString("00")?+?".jpg";
????????????????AsynchronouslyDownloadPage(theResources,?theResourcesNum);
????????????}
????????????else
????????????{
????????????????FillPagesList();
????????????????this.canvChanging.Visibility?=?Visibility.Collapsed;
????????????????this.canvasBook.Visibility?=?Visibility.Visible;
????????????}
????????}
????????//強制聲明接口
????????#region?IDataProvider?Members
????????public?object?GetItem(int?index)
????????{
????????????return?PageObjectList[index];
????????}
????????public?int?GetCount()
????????{
????????????return?PageObjectList.Count;
????????}
????????#endregion
????}
}
?
2)App.xaml.cs文件代碼:
Codeusing?System;
using?System.Collections.Generic;
using?System.Linq;
using?System.Net;
using?System.Windows;
using?System.Windows.Controls;
using?System.Windows.Documents;
using?System.Windows.Input;
using?System.Windows.Media;
using?System.Windows.Media.Animation;
using?System.Windows.Shapes;
namespace?SilverlightClient
{
????public?partial?class?App?:?Application
????{
????????public?string?gFileMedia?=?"";
????????public?string?gHeaderPage?=?"";
????????public?int?gPageNumber?=?0;
????????public?string?gModeLocation?=?"";
????????
????????public?App()
????????{
????????????this.Startup?+=?this.Application_Startup;
????????????this.Exit?+=?this.Application_Exit;
????????????this.UnhandledException?+=?this.Application_UnhandledException;
????????????InitializeComponent();
????????}
????????private?void?Application_Startup(object?sender,?StartupEventArgs?e)
????????{
????????????int?paramOk?=?0;
????????????//從HTML中取出初始化數據
????????????if?(e.InitParams.ContainsKey("gFile"))
????????????{
????????????????gFileMedia?=?e.InitParams["gFile"];
????????????????paramOk++;
????????????}
????????????if?(e.InitParams.ContainsKey("gHeaderPage"))
????????????{
????????????????gHeaderPage?=?e.InitParams["gHeaderPage"];
????????????????paramOk++;
????????????}
????????????if?(e.InitParams.ContainsKey("gNum"))
????????????{
????????????????string?recup?=?e.InitParams["gNum"];
????????????????gPageNumber?=?int.Parse(recup);
????????????????paramOk++;
????????????}
????????????if?(e.InitParams.ContainsKey("gLocation"))
????????????{
????????????????gModeLocation?=?e.InitParams["gLocation"];
????????????????paramOk++;
????????????}
????????????if?(paramOk?==?4)
????????????{
????????????????//初始化MainPage
????????????????MainPage?maPage?=?new?MainPage();
????????????????maPage.fileMedia?=?gFileMedia;
????????????????maPage.headerPage?=?gHeaderPage;
????????????????maPage.maxiPageNum?=?gPageNumber;
????????????????if?(gModeLocation.CompareTo("local")?==?0)
????????????????{
????????????????????maPage.modeLocation?=?MainPage.Location.local;
????????????????}
????????????????if?(gModeLocation.CompareTo("web")?==?0)
????????????????{
????????????????????maPage.modeLocation?=?MainPage.Location.web;
????????????????}
????????????????this.RootVisual?=?maPage;
????????????}
????????}
????????private?void?Application_Exit(object?sender,?EventArgs?e)
????????{
????????????
????????}
????????private?void?Application_UnhandledException(object?sender,?ApplicationUnhandledExceptionEventArgs?e)
????????{
????????????if?(!System.Diagnostics.Debugger.IsAttached)
????????????{
????????????????e.Handled?=?true;
????????????????Deployment.Current.Dispatcher.BeginInvoke(delegate?{?ReportErrorToDOM(e);?});
????????????}
????????}
????????private?void?ReportErrorToDOM(ApplicationUnhandledExceptionEventArgs?e)
????????{
????????????try
????????????{
????????????????string?errorMsg?=?e.ExceptionObject.Message?+?e.ExceptionObject.StackTrace;
????????????????errorMsg?=?errorMsg.Replace('"',?'\'').Replace("\r\n",?@"\n");
????????????????System.Windows.Browser.HtmlPage.Window.Eval("throw?new?Error(\"Unhandled?Error?in?Silverlight?Application?"?+?errorMsg?+?"\");");
????????????}
????????????catch?(Exception)
????????????{
????????????}
????????}
????}
}
?
3)在SilverlightClientTestPage.aspx文件(位于工程FlipPage文件夾下)中,添加用綠色粗體標明的代碼:
?
<body>
??? <form id="form1" runat="server" style="height:100%">
??? <div id="silverlightControlHost">
??????? <object data="data:application/x-silverlight-2," type="application/x-silverlight-2" width="100%" height="100%">
??????? ? <param name="source" value="ClientBin/SilverlightClient.xap"/>
??????? ? <param name="onError" value="onSilverlightError" />
??????? ? <param name="background" value="white" />
??????? ? <param name="minRuntimeVersion" value="3.0.40624.0" />
??????? ? <param name="autoUpgrade" value="true" />
????????? <!--設置Book初始化參數-->
??????? ? <param name="initParams" value="gFile=mediaPictures, gHeaderPage=albumPictures, gNum=9, gLocation=web" />
??????? ? <a href="http://go.microsoft.com/fwlink/?LinkID=149156&v=3.0.40624.0" style="text-decoration:none">
??????????? ? <img src="http://go.microsoft.com/fwlink/?LinkId=108181" alt="Get Microsoft Silverlight" style="border-style:none"/>
??????? ? </a>
??? ??? </object><iframe id="_sl_historyFrame" style="visibility:hidden;height:0px;width:0px;border:0px"></iframe></div>
??? </form>
</body>
?
5、最終效果圖
[項目源文件下載]
| 四代蘋果MP4播放器 8GB MP5旋轉觸摸+MP3甩歌+重力感應+FM |
| 125.0元 |
文章出處:Kinglee’s Blog (http://www.cnblogs.com/Kinglee/)
版權聲明:本文的版權歸作者與博客園共有。轉載時須注明本文的詳細鏈接,否則作者將保留追究其法律責任。
轉載于:https://www.cnblogs.com/Kinglee/archive/2009/11/02/1594479.html
總結
以上是生活随笔為你收集整理的教你打造Silverlight超酷翻页实例的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Firebug Command Line
- 下一篇: QCon日记