本实例将读取拖动到Silverlight的ListBox控件中的txt文件或者Jpg文件。在本实例中将讲如果通过UIelementA.Drop事 件获取到拖动到UIelementA上的文件的相关名称以及路径等信息,以处理多个外部文件拖动到Silverlight中的相关一些小技巧的应用和操 作。
在本例中我们设置外部文件拖动到ListBox中去,首先我们要设置ListBox的AllowDrop="True",再添加一个Drop事件 Drop="listBox1_Drop",这样在外部文件拖动到ListBox中的时候可以触发Drop事件。
首先我们来看MainPage.xaml代码如下所示:
- <Grid x:Name="LayoutRoot" Background="White" Width="600">
- <StackPanel HorizontalAlignment="Left" VerticalAlignment="Top" Width="600"
- Orientation="Horizontal">
- <ListBox Name="listBox1" Background="AliceBlue" Width="240"
- HorizontalAlignment="Left" VerticalAlignment="Top"
- AllowDrop="True" Height="400" Drop="listBox1_Drop">
- </ListBox>
- <TextBlock Height="149" HorizontalAlignment="Left"
- Name="textBlock1" VerticalAlignment="Top"
- Width="323" TextWrapping="Wrap" />
- </StackPanel>
- <Image Height="238" Name="image1" HorizontalAlignment="Left"
- VerticalAlignment="Top" Margin="240 160 0 0" Stretch="Fill"
- Width="320" Source="/SLDragFile;component/Images/1_24573_f93ae69954e2e1d.jpg" />
- </Grid>
在上面有一个TextBlock显示读取到的Txt文件内容,还有一个Image控件显示读取到的图片内容。下面我们看MainPage.xaml.cs文件代码如下:
- using 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;
- using System.Windows.Navigation;
- using System.IO;
- using System.Windows.Markup;
- using System.Windows.Media.Imaging;
- namespace SLDragFile
- {
- public partial class MainPage : UserControl
- {
- public MainPage()
- {
- InitializeComponent();
- }
- private void listBox1_Drop(object sender, DragEventArgs e)
- {
- //获取与拖放事件相关联的元素
- IDataObject dataObject = e.Data as IDataObject;
- //返回被拖放的外部文件的 FileInfo 数组
- FileInfo[] files = dataObject.GetData(DataFormats.FileDrop) as FileInfo[];
- foreach (FileInfo file in files)
- {
- //如果存在文件
- if (file.Exists)
- {
- listBox1.Items.Add("文件名: " + file.Name);
- //如果是txt文件,读取txt文件并且显示出来
- if (file.Extension.ToLower() == ".txt")
- {
- StreamReader sreader = file.OpenText();
- string txtstr = "";
- string ReadStr = string.Empty;
- while ((txtstr = sreader.ReadLine()) != null)
- {
- ReadStr += txtstr;
- }
- this.textBlock1.Text = ReadStr;
- }
- //如果是Jpg图片,读取图片并且显示出来
- if (file.Extension.ToLower() == ".jpg")
- {
- FileStream fs= file.OpenRead();
- BitmapImage image = new BitmapImage();
- image.SetSource(fs);
- image1.Source = image;
- }
- }
- else
- {
- listBox1.Items.Add("文件添加失败!");
- }
- }
- }
- }
- }
下面我们来看看拖动一张jpg图片文件的效果如下:
拖动一个UTF-8格式的txt文件的效果如下:
拖动多个文件到ListBox所出现的情况如下面三张图片所示:
本文采用VS2010+Silverlight 4.0编写,如需源码请点击 SLDragFile.zip 下载
本文转自程兴亮 51CTO博客,原文链接:http://blog.51cto.com/chengxingliang/826451