本实例将读取拖动到Silverlight的ListBox控件中的txt文件或者Jpg文件。在本实例中将讲如果通过UIelementA.Drop事 件获取到拖动到UIelementA上的文件的相关名称以及路径等信息,以处理多个外部文件拖动到Silverlight中的相关一些小技巧的应用和操 作。

        在本例中我们设置外部文件拖动到ListBox中去,首先我们要设置ListBox的AllowDrop="True",再添加一个Drop事件 Drop="listBox1_Drop",这样在外部文件拖动到ListBox中的时候可以触发Drop事件。

        首先我们来看MainPage.xaml代码如下所示:

  1. <Grid x:Name="LayoutRoot" Background="White" Width="600"
  2.     <StackPanel HorizontalAlignment="Left" VerticalAlignment="Top" Width="600"  
  3.                 Orientation="Horizontal"
  4.         <ListBox Name="listBox1" Background="AliceBlue" Width="240" 
  5.                  HorizontalAlignment="Left" VerticalAlignment="Top"  
  6.                  AllowDrop="True" Height="400" Drop="listBox1_Drop"
  7.         </ListBox> 
  8.         <TextBlock Height="149" HorizontalAlignment="Left"  
  9.                    Name="textBlock1" VerticalAlignment="Top"  
  10.                    Width="323" TextWrapping="Wrap" /> 
  11.     </StackPanel> 
  12.         <Image Height="238" Name="image1" HorizontalAlignment="Left" 
  13.                VerticalAlignment="Top" Margin="240 160 0 0" Stretch="Fill" 
  14.      Width="320" Source="/SLDragFile;component/Images/1_24573_f93ae69954e2e1d.jpg" /> 
  15. </Grid> 
 

       在上面有一个TextBlock显示读取到的Txt文件内容,还有一个Image控件显示读取到的图片内容。下面我们看MainPage.xaml.cs文件代码如下:


  1. using System; 
  2. using System.Collections.Generic; 
  3. using System.Linq; 
  4. using System.Net; 
  5. using System.Windows; 
  6. using System.Windows.Controls; 
  7. using System.Windows.Documents; 
  8. using System.Windows.Input; 
  9. using System.Windows.Media; 
  10. using System.Windows.Media.Animation; 
  11. using System.Windows.Shapes; 
  12. using System.Windows.Navigation; 
  13. using System.IO; 
  14. using System.Windows.Markup; 
  15. using System.Windows.Media.Imaging; 
  16.  
  17. namespace SLDragFile 
  18. public partial class MainPage : UserControl 
  19. public MainPage() 
  20. InitializeComponent(); 
  21. private void listBox1_Drop(object sender, DragEventArgs e) 
  22. //获取与拖放事件相关联的元素 
  23. IDataObject dataObject = e.Data as IDataObject; 
  24. //返回被拖放的外部文件的 FileInfo 数组 
  25. FileInfo[] files = dataObject.GetData(DataFormats.FileDrop) as FileInfo[]; 
  26.  
  27. foreach (FileInfo file in files) 
  28. //如果存在文件 
  29. if (file.Exists) 
  30. listBox1.Items.Add("文件名: " + file.Name); 
  31. //如果是txt文件,读取txt文件并且显示出来 
  32. if (file.Extension.ToLower() == ".txt"
  33. StreamReader sreader = file.OpenText(); 
  34. string txtstr = ""
  35. string ReadStr = string.Empty; 
  36. while ((txtstr = sreader.ReadLine()) != null
  37. ReadStr += txtstr; 
  38. this.textBlock1.Text = ReadStr; 
  39. //如果是Jpg图片,读取图片并且显示出来 
  40. if (file.Extension.ToLower() == ".jpg"
  41. FileStream fs= file.OpenRead(); 
  42. BitmapImage image = new BitmapImage(); 
  43. image.SetSource(fs); 
  44. image1.Source = image; 
  45.  
  46. else 
  47. listBox1.Items.Add("文件添加失败!"); 

        下面我们来看看拖动一张jpg图片文件的效果如下:

 

        拖动一个UTF-8格式的txt文件的效果如下:

 

        拖动多个文件到ListBox所出现的情况如下面三张图片所示:

        本文采用VS2010+Silverlight 4.0编写,如需源码请点击 SLDragFile.zip 下载