有的老師問:WPF能否播放Flash動畫?可以。但是由于微軟有點“自私”,WPF本身不直接支持播放Flash動畫,需要做點“設計”,下面是示例(嵌入WPF窗口播放)。
1、首先在VS2010中建立項目。打開VS2010后選擇“文件”-“新建”-“項目”,選擇“WPF應用程序”,如下圖所示,項目名稱為WpfFlashPlayer。
2、選中項目解決方案名稱,點右鍵,選擇“添加”—“新建項目”,出現(xiàn)下圖窗口。選擇“Windows窗體控件庫”,名稱定為WindowsFormsFlashControlLibrary,點“確定”鍵。
3、在工具箱中選擇Shockwave FlashObject,如果工具箱中沒有出現(xiàn),只要在工具箱中點右鍵選擇“選擇項”,就會出現(xiàn)圖1-99,選擇其中的“Shockwave FlashObject”后點“確定”鍵。這時工具箱中會增加Shockwave Flash Object控件,將其拖入設計窗口。
圖1-99
4、開始執(zhí)行程序,在項目“WindowsFormsFlashControlLibrary”的“Bin\Debug”文件夾中自動生成:
AxInterop.ShockwaveFlashObjects.dll和Interop.ShockwaveFlashObjects.dll
這2個文件是Windows系統(tǒng)下FlashPlayer播放器控件在WPF中應用的接口,有了這兩個文件,他人就無需做上面的重復設計了,可以在下面使用。
5、然后在Expression Blend 4中建立1個WPF項目,如WpfFlashPlayer。
首先在項目的“引用”中添加下面2個文件的引用(可到上面說的文件夾中找此文件):
AxInterop.ShockwaveFlashObjects.dll
Interop.ShockwaveFlashObjects.dll
并且在.xaml.cs文件前添加命名空間:
usingAxShockwaveFlashObjects;
usingShockwaveFlashObjects;
這時,項目中可以使用FlashPlayer的類AxShockwaveFlash創(chuàng)建播放器對象,此對象在WPF窗口的顯示同樣需要借助于接口控件WindowsFormsHost,這樣需要在項目的“引用”中添加如下文件:
System.Windows.Forms.dll(C:\WINDOWS\Microsoft.NET\Framework\v4.0.30319)
WindowsFormsIntegration.dll(C:\WINDOWS\Microsoft.NET\Framework\v4.0.30319\WPF)
前1個引用的添加將保證AxShockwaveFlash的正常應用。后1個引用的添加,“資產(chǎn)”欄目中就出現(xiàn)WindowsFormsHost控件了。
因為要播放視頻,允許從當前磁盤中選擇,需要使用打開文件對話框,后面的程序中使用到定時器,所以需要添加命名空間引用:
usingMicrosoft.Win32;//for OpenFileDialog
以上是設計的準備工作,已經(jīng)完成,下面進行界面設計。
從“資產(chǎn)”欄目中找到WindowsFormsHost控件,拖入MainWindow窗口,命名為wfh,調整其大小合適播放Flash動畫。放入1個按鈕“選擇SWF文件”(button):
//選擇SWF文件(程序注解參照前面的“選擇WMV文件”)
private void button_Click(object sender,System.Windows.RoutedEventArgs e)
{
OpenFileDialog openfile = new OpenFileDialog();
openfile.Filter = "選擇SWF文件|*.swf";
openfile.Title = "選擇SWF文件";
if (openfile.ShowDialog() == true)
{
if (openfile.FileName != "")
{
FlashPlayer.Movie=openfile.FileName;
}
}
}
//Windows啟動時播放指定的Flash動畫
private void Window_Loaded(object sender,System.Windows.RoutedEventArgs e)
{
// FlashPlayer作為wfh的子對象
wfh.Child = FlashPlayer;
//獲取動畫文件路徑定位,System.Environment.CurrentDirectory指向項目的Debug文件
string //作為播放器的播放文件
FlashPlayer.Movie=swff;
//窗口標題顯示Flash Player的版本
this.Window.Title="WPF中嵌入FlashPlayer:"+FlashPlayer.ProductVersion;
}
設計完成了,老師如果還有問題請發(fā)信到郵箱。