zoukankan      html  css  js  c++  java
  • 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.

  • 相关阅读:
    第三天 moyax
    mkfs.ext3 option
    write file to stroage trigger kernel warning
    download fomat install rootfs script
    custom usb-seriel udev relus for compatible usb-seriel devices using kermit
    Wifi Troughput Test using iperf
    learning uboot switch to standby system using button
    learning uboot support web http function in qca4531 cpu
    learngin uboot design parameter recovery mechanism
    learning uboot auto switch to stanbdy system in qca4531 cpu
  • 原文地址:https://www.cnblogs.com/chenkai/p/1766942.html
Copyright © 2011-2022 走看看