
在上次项目中写过多篇关于拖拽的实现. 这些拖拽都是控件之间的效果. Silverlight 4 中我们甚至可以直接把文件系统中文件拖拽到Silverlight Application中承载. 这就是 silverlight 4中新特性Silverlight As Drop Target 支持这一点. 为了达到演示目的. 使用桌面图片拖拽到Silverlight Application中ScrollVIEwer动态显示. 先体验一下[你可以尝试从本地文件系统直接拖拽图片到这个Silverlight Application中看一下效果]:
实现步骤:
<1>: 页面布局
<StackPanel x:name="LayoutRoot" Background="White"> <TextBlock Text=" "></TextBlock> <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" /> <ScrollVIEwer x:name="ImagesTarget" Background="White" Height="360" borderBrush="Red" VerticalScrollbarVisibility="HIDden" HorizontalScrollbarVisibility="auto" AllowDrop="True"> <ItemsControl x:name="ImageList" Height="353"> <!--定义数据模板 支持格式是Image图片 很重要 不然会包invaID异常 数据模板确实很强大.--> <ItemsControl.ItemTemplate> <DataTemplate> <Image Source="{Binding}" margin="5" Stretch="UniformToFill" Height="240" /> </DataTemplate> </ItemsControl.ItemTemplate> <!--项排序模式Horizontal 居中--> <ItemsControl.ItemsPanel> <ItemsPanelTemplate> <StackPanel OrIEntation="Horizontal" VerticalAlignment="Center" HorizontalAlignment="Center"/> </ItemsPanelTemplate> </ItemsControl.ItemsPanel> </ItemsControl> </ScrollVIEwer> </StackPanel>
<2>:后台实现代码
//定义存储Image集合. ObservableCollection<BitmAPImage> _images = new ObservableCollection<BitmAPImage>(); public MainPage() { InitializeComponent(); this.Loaded += new RoutedEventHandler(MainPage_Loaded); } voID MainPage_Loaded(object sender, RoutedEventArgs e) { //如果Image数据则直接加载进来. ImageList.ItemsSource = _images; ImagesTarget.Drop += new DragEventHandler(ImagesTarget_Drop); } voID ImagesTarget_Drop(object sender, DragEventArgs e) { //判断拖拽数据是否存在 if (e.Data == null) { return; } else { //利用fileinfo 来初始化关于文件系统日常 *** 作io对象 fileinfo 【】数组 意味支持多张Image同时拖拽Silverlight Application IDataObject dataObject = e.Data as IDataObject; fileInfo[] files =dataObject.GetData(DataFormats.fileDrop) as fileInfo[]; foreach (fileInfo file in files) { try { using (var stream = file.OpenRead()) { //读取拖拽中图片源. var imageSource = new BitmAPImage(); imageSource.SetSource(stream); //添加到集合中. _images.Add(imageSource); } } catch (Exception) { MessageBox.Show("Not a suppoted image."); } } } }
因为前台ScrollVIEw中DataTemplate中定义格式是Image绑定. 后台数据源用到ObservableCollection<BitmAPImage>来封装从拖拽中得到图片数据. 另外一个就是fileInfo,提供创建、复制、删除、移动和打开文件的实例方法,并且帮助创建 FileStream 对象,既然通过fileinfo得到fileStream对象 其他 *** 作就是平常IO *** 作. 而fileinfo[]数组则是用来支持同时拖拽多个对象.关于fileinfo 更多详细资料请参见MSDN.
总结以上是内存溢出为你收集整理的Silverlight 4 新特性之Silverlight as Drop Target全部内容,希望文章能够帮你解决Silverlight 4 新特性之Silverlight as Drop Target所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)