• Silverlight 4 新特性之Silverlight as Drop Target


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

      Get Microsoft Silverlight

    实现步骤:

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

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

  • 相关阅读:
    使用lambda的精简写法
    lambda实现集合遍历 排序
    stream流 list转map
    stream.min
    lambda实现线程调用
    stream.allMatch
    stream.reduce
    stream流 of
    Stream流 list转set
    SQL Server 游标的简单介绍 转载
  • 原文地址:https://www.cnblogs.com/chenkai/p/1766942.html
Copyright © 2020-2023  润新知