天天看點

風雲的銀光志Silverlight4.0教程之周遊通路用戶端使用者的本地檔案

微軟于PDC2009上釋出Silverlight 4 Beta版,微軟在Silverlight 4版本中處理了約8000個的Silverlight終端使用者的請求,加入了一系列另開發人員興奮的新特性,最突出的主要展現在幾個方面:

開發工具增強:Visual Studio 2010具有可視化的設計工具,建立項目時可以選擇運作時版本是3.0還是4.0,BLEND4加入XAML和C#代碼全方位智能感覺功能、XAML的樣式應用更為易用等。

攝像頭與MIC硬體支援:可以用極少量的代碼實作啟用使用者本機的WebCam和Mic,并可進行本地錄制。

報表列印支援:報表列印問題在Silverlight4中得到的較好的解決。

更強大的基礎類控件(RichTextBox、DataGrid增強版):富文本控件RichTextBox和具有可粘貼、排序功能的DataGrid被加入。

WCF增強:終于支援TCP通訊,比較HTTP提升3-5倍,限于4502-4534端口。

相容性增強:對Google的Chrome浏覽器的支援。

MEF支援:MEF全稱為Managed Extensibility Framework,譯為“托管擴充架構”,支援建立大型複雜的應用程式。

運作速度提升:啟動速度和渲染速度較前個版本提升約2倍左右。

DRM增強:支援PlayReady,可以對視訊和音頻的播放進行的保護,補充了對H.264的DRM保護。

其它增強:本地檔案讀寫、滑鼠右鍵事件支援、剪粘闆支援。

在Silverlight 3.0支援對使用者本地檔案的讀寫操作(OpenFileDialog和SaveFileDialog),Silverlight 4.0将允許我們通路用戶端使用者的本地檔案,不過“本地檔案”并不是指使用者所有的驅動器磁盤,而是使用者我的檔案内的檔案,其中包括:我的檔案、我的音樂、我的圖檔、我的視訊。

下面我們通過一個執行個體介紹如何周遊通路Silverlight用戶端使用者的本地檔案清單,并綁定到一個ListBox控件上面顯示出來。

XAML:

1      <StackPanel x:Name="LayoutRoot" Width="640" Background="White"> 

2          <StackPanel.Resources> 

3              <Style TargetType="Button"> 

4                  <Setter Property="Width" Value="80"/> 

5                  <Setter Property="Height" Value="30"/> 

6                  <Setter Property="FontSize" Value="12"/> 

7                  <Setter Property="FontFamily" Value="SimSun"/> 

8              </Style> 

9          </StackPanel.Resources> 

10         <Border Width="300" Height="20"> 

11             <TextBlock FontSize="14"> 

12                 Silverlight4周遊使用者本地文檔 

13             </TextBlock> 

14         </Border> 

15         <StackPanel Orientation="Horizontal"> 

16             <Grid Width="100"> 

17                 <Grid.RowDefinitions> 

18                     <RowDefinition/> 

19                     <RowDefinition/> 

20                     <RowDefinition/> 

21                     <RowDefinition/> 

22                 </Grid.RowDefinitions> 

23                 <Button x:Name="btnMyDocument" Grid.Row="0" Content="我的檔案"/> 

24                 <Button x:Name="btnMyVideo" Grid.Row="1" Content="我的視訊"/> 

25                 <Button x:Name="btnMyPhoto" Grid.Row="2" Content="我的圖檔"/> 

26                 <Button x:Name="btnMyMusic" Grid.Row="3" Content="我的音樂"/> 

27             </Grid> 

28             <!--本地檔案清單--> 

29             <ListBox x:Name="lstFiles" Width="540" Height="300"/> 

30         </StackPanel> 

31     </StackPanel>

C#:

1          void FileSysSample_Loaded(object sender, RoutedEventArgs e) 

2          { 

3              btnMyDocument.Click += new RoutedEventHandler(btnMyDocument_Click); 

4              btnMyPhoto.Click += new RoutedEventHandler(btnMyPhoto_Click); 

5              btnMyVideo.Click += new RoutedEventHandler(btnMyVideo_Click); 

6              btnMyMusic.Click += new RoutedEventHandler(btnMyMusic_Click); 

7          } 

8  

9          void btnMyMusic_Click(object sender, RoutedEventArgs e) 

10         { 

11             folderList = new List<string>(); 

12             var musics = Directory.EnumerateFiles(Environment.GetFolderPath(Environment.SpecialFolder.MyMusic)); 

13             foreach (var item in musics) 

14             { 

15                 folderList.Add(item); 

16             } 

17             lstFiles.ItemsSource = folderList; 

18         } 

19 

20         private List<string> folderList = new List<string>(); 

21 

22         void btnMyVideo_Click(object sender, RoutedEventArgs e) 

23         { 

24             folderList = new List<string>(); 

25             var videos = Directory.EnumerateFiles(Environment.GetFolderPath(Environment.SpecialFolder.MyVideos)); 

26             foreach (var item in videos) 

27             { 

28                 folderList.Add(item); 

29             } 

30             lstFiles.ItemsSource = folderList; 

31         } 

32 

33         void btnMyPhoto_Click(object sender, RoutedEventArgs e) 

34         { 

35             folderList = new List<string>(); 

36             var pictures = Directory.EnumerateFiles(Environment.GetFolderPath(Environment.SpecialFolder.MyPictures)); 

37             foreach (var item in pictures) 

38             { 

39                 folderList.Add(item); 

40             } 

41             lstFiles.ItemsSource = folderList; 

42         } 

43 

44         void btnMyDocument_Click(object sender, RoutedEventArgs e) 

45         { 

46             folderList = new List<string>(); 

47             var documents = Directory.EnumerateFiles(Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments)); 

48             foreach (var item in documents) 

49             { 

50                 folderList.Add(item); 

51             } 

52             lstFiles.ItemsSource = folderList; 

53         }

運作結果如圖所示。

下面我們對代碼裡起到關鍵作用的類和方法進行簡單的介紹:

System.IO.Directory類:通路使用者本地檔案的目錄類。

Environment.GetFolderPath:用來傳回檔案的完整路徑。

Environment.SpecialFolder:包含我們需要擷取的檔案類型。

運作本程式還有一個需要注意的地方是,基于安全性考慮,本Silverlight程式需要運作在Out-of-Browser環境下,如果你在浏覽器視窗中運作會引發權限的異常錯誤,是以使用者必須安裝此程式才能正常運作。

希望對大家有用!

本文轉自dotfun 51CTO部落格,原文連結:http://blog.51cto.com/dotfun/285165

繼續閱讀