在上次项目中写过多篇关于拖拽的实现. 这些拖拽都是控件之间的效果. Silverlight 4 中我们甚至可以直接把文件系统中文件拖拽到Silverlight Application中承载. 这就是 silverlight 4中新特性Silverlight As Drop Target 支持这一点. 为了达到演示目的. 使用桌面图片拖拽到Silverlight Application中ScrollViewer动态显示. 先体验一下[你可以尝试从本地文件系统直接拖拽图片到这个Silverlight Application中看一下效果]:

实现步骤:

<1>: 页面布局

  1. <StackPanel x:Name="LayoutRoot" Background="White">
  2. <TextBlock Text="  "></TextBlock>
  3. <TextBlock Text="Silverlight AS Drop target.-chenkai[10.6.28]" VerticalAlignment="Center" HorizontalAlignment="Left" FontSize="16" Foreground="Red"  FontFamily="Comic Sans MS" FontWeight="BOld" Height="25" Width="655" />
  4. <ScrollViewer x:Name="ImagesTarget" Background="White"  Height="360" BorderBrush="Red"
  5. VerticalScrollBarVisibility="Hidden" HorizontalScrollBarVisibility="Auto" AllowDrop="True">
  6. <ItemsControl x:Name="ImageList" Height="353">
  7. <!--定义数据模板 支持格式是Image图片 很重要 不然会包invaid异常 数据模板确实很强大.-->
  8. <ItemsControl.ItemTemplate>
  9. <DataTemplate>
  10. <Image Source="{Binding}" Margin="5" Stretch="UniformToFill" Height="240" />
  11. </DataTemplate>
  12. </ItemsControl.ItemTemplate>
  13. <!--项排序模式Horizontal 居中-->
  14. <ItemsControl.ItemsPanel>
  15. <ItemsPanelTemplate>
  16. <StackPanel Orientation="Horizontal" VerticalAlignment="Center" HorizontalAlignment="Center"/>
  17. </ItemsPanelTemplate>
  18. </ItemsControl.ItemsPanel>
  19. </ItemsControl>
  20. </ScrollViewer>
  21. </StackPanel>

<2>:后台实现代码

  1. //定义存储Image集合.
  2. ObservableCollection<BitmapImage> _images = new ObservableCollection<BitmapImage>();
  3. public MainPage()
  4. {
  5. InitializeComponent();
  6. this.Loaded += new RoutedEventHandler(MainPage_Loaded);
  7. }
  8. void MainPage_Loaded(object sender, RoutedEventArgs e)
  9. {
  10. //如果Image数据则直接加载进来.
  11. ImageList.ItemsSource = _images;
  12. ImagesTarget.Drop += new DragEventHandler(ImagesTarget_Drop);
  13. }
  14. void ImagesTarget_Drop(object sender, DragEventArgs e)
  15. {
  16. //判断拖拽数据是否存在
  17. if (e.Data == null)
  18. {
  19. return;
  20. }
  21. else
  22. {
  23. //利用Fileinfo 来初始化关于文件系统日常操作io对象 Fileinfo 【】数组 意味支持多张Image同时拖拽Silverlight Application
  24. IDataObject dataObject = e.Data as IDataObject;
  25. FileInfo[] files =dataObject.GetData(DataFormats.FileDrop) as FileInfo[];
  26. foreach (FileInfo file in files)
  27. {
  28. try
  29. {
  30. using (var stream = file.OpenRead())
  31. {
  32. //读取拖拽中图片源.
  33. var imageSource = new BitmapImage();
  34. imageSource.SetSource(stream);
  35. //添加到集合中.
  36. _images.Add(imageSource);
  37. }
  38. }
  39. catch (Exception)
  40. {
  41. MessageBox.Show("Not a suppoted image.");
  42. }
  43. }
  44. }
  45. }

因为前台ScrollView中DataTemplate中定义格式是Image绑定. 后台数据源用到ObservableCollection<BitmapImage>来封装从拖拽中得到图片数据. 另外一个就是FileInfo,提供创建、复制、删除、移动和打开文件的实例方法,并且帮助创建 FileStream 对象, 既然通过Fileinfo得到FileStream对象 其他操作就是平常IO操作. 而Fileinfo[]数组则是用来支持同时拖拽多个对象.关于Fileinfo 更多详细资料请参见MSDN.

本文转自chenkaiunion 51CTO博客,原文链接:http://blog.51cto.com/chenkai/764886

Silverlight 4 新特性之Silverlight as Drop Target相关推荐

  1. Silverlight 5 新特性

    微软Silverlight 团队在12月9日早上低调的发布了Silverlight 第五个版本-Silverlight 5. Silverlight 5 Available is Here 这也可能是 ...

  2. Silverlight 5 Beta新特性博文索引

    在MIX11大会上相对Windows phone 7 令人瞩目期待本年一次重大更新Mango所带来的新特性以及Kinect for Windows SDK在现场大放异彩的Action演示.Silver ...

  3. Silverlight 5 Beta新特性[5]隐式模板支持

    继续更新Silverlight 5 Beta新特性.在Silverlight 5 BEta更新出来新特性中有一些是WPF已经存在的影子.类似前面提到的多窗体[Multiple Window Suppo ...

  4. 【转】Silverlight 3 Beta 新特性解析(7)- Child Window和Shader Effect篇

    前提条件: 阅读本文之前请确认你已经安装了如下软件 Visual Studio 2008 (Express) SP1 Silverlight 3 Tools For Visual Studio Mic ...

  5. Silverlight 5 Beta 新特性预览

    MIX11大会昨天刚刚结束.第二天核心Session包含三个部分:Windows phone 7/Silverlight 5 Beta/Kinect for Windows SDK.在整个全程直播中. ...

  6. Silverlight 4 Beta开发版带着许多新特性发布

    Microsoft在PDC 2009 上宣布,他们已经开始提供Silverlight开发版Beta 了, 这距离上个发布Silverlight 3仅有几个月时间.新版本中有大量新的特性:一套完整的控件 ...

  7. Silverlight 5 beta新特性探索系列:9.视频快进快退和TextSearch对象对文字项查询

    本节讲诉两个新特性:一.在Silverlight 5中可以控制MediaElement对象播放的视频进行快进快退控制.二.在Silverlight 5中的文字项进行搜索查询. 一.对于MediaEle ...

  8. Silverlight 5 Beta新特性[4]文本缩进控制

    持续带来Silverlight 5 Beta新特性的更新.在Silverlight 5 Beta版本对文本的处理能力做了真正的改进.其中从官方Silverlight 5 Beta Futurez中提到 ...

  9. 微软SQL Server 2012新特性Silverlight报表客户端 - Power View

    微软SQL Server 2012是一个全面的数据库平台,使用集成的商业智能 (BI) 工具提供了企业级的数据管理.其中Reporting Service报表系统是目前最流行的报表设计,开发以及生成工 ...

最新文章

  1. msys2 安装注意事项
  2. 中文分词最佳记录刷新了,两大模型分别解决中文分词及词性标注问题丨已开源...
  3. 利用IShellExecuteHook接口对程序监控
  4. Docker数据卷(Volume)
  5. 英特尔Nehalem微架构三级缓存原理学习
  6. MySQL入门-3:安装与客户端工具
  7. 基于mysql数据库的应用_MySQL数据库应用
  8. go返回多个值和python返回多个值对比
  9. 【小技巧】【堆】【优先队列】优先队列初始化
  10. hello nodejs
  11. (四)Raspberry Pi上的人工智能人脸检测
  12. 0004-程序流程2之ui-router大意
  13. JSP基础之九九乘法表(利用JSP脚本段制作一张九九乘法表)
  14. 嵌入式 Linux 入门(一、Linux 基本介绍及文件结构)
  15. 固定资产管理系统怎么选,详细评测为你解答
  16. 制作ubuntu18.04启动盘 + 安装ubuntu18.04
  17. Shopee聊聊客服工作日常
  18. hutool 解读(三)—— IO流
  19. python+selenium自动化软件测试(第3章):unittest
  20. 零工经济爆发:蓝鸟云破而后立,BOSS直聘稳步推进

热门文章

  1. sv队列和动态数组的区别_systemverilog学习(4)动态数组
  2. win7卡在正在启动windows界面_win7如何重装ie8
  3. auto-sklearn详解
  4. java单链表节点翻转_单链表Java实现
  5. excel修改列名_听说你还在手动合并Excel,看看这个吧!?
  6. java 错误日期转正确日期_Java日期格式转换-错误的月份
  7. 风险管理6个过程及相关重点
  8. 笔记整理-知识产权与标准化知识-GB/T11457-2006软件工程术语
  9. 笔记-项目质量管理-复习要点
  10. 从虚拟化到云原生——容器技术的发展史