Silverlight中的“拖拽操作”: 把图片拖拽到Silverlight页面里。

Drop对象

- 文件拖拽支持

- AllowDrop属性与Drop事件;当设置为True的时候则可以响应Drop事件。

Demo:如何把一个图片拖拽到Silverlight里。

XAML:

<UserControl x:Class="ImageDropDemo.MainPage"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    mc:Ignorable="d"
    d:DesignHeight="300" d:DesignWidth="400">

    <Grid x:Name="LayoutRoot" Background="White">
        <StackPanel x:Name="stpContainer" Margin="10">
            <TextBlock Text="把图片拖放到下面区域:" FontWeight="Bold" Margin="10"/>
            <ScrollViewer x:Name="scvContainer" Width="750" Height="500" HorizontalAlignment="Left"/>
        </StackPanel>
    </Grid>
</UserControl>


XAML.CS:

using System.IO;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;

namespace ImageDropDemo
{
    public partial class MainPage : UserControl
    {
        //需要引用System.Windows.Controls.Toolkit 才能使用WrapPanel
        //WrapPanel类:从左至右按顺序位置定位子元素,将内容断开至下一行在包含框的边缘。后续排序按照 Orientation 属性的值按照从上至下或从右至左的顺序进行
        private WrapPanel imageContainer = null;
        private SolidColorBrush highLightColor = new SolidColorBrush(Colors.DarkGray);
        private SolidColorBrush transParentColor = new SolidColorBrush(Colors.Transparent);

        public MainPage()
        {
            InitializeComponent();
            imageContainer = new WrapPanel() { Background = new SolidColorBrush(Colors.LightGray) };
            scvContainer.Content = imageContainer;
            //让imageContainer允许Drop拖放,任何其他容器也有这个属性。
            imageContainer.AllowDrop = true;
            //注册Drop事件
            imageContainer.Drop += new DragEventHandler(imageContainer_Drop);
        }

        void imageContainer_Drop(object sender, DragEventArgs e)
        {
            //获取拖拽进来的所有文件信息
            FileInfo[] droppeedFiles = e.Data.GetData(DataFormats.FileDrop) as FileInfo[];
            foreach (FileInfo droppedFile in droppeedFiles)
            {
                //判断.后缀名是否支持(jpg和png格式图片)
                if (IsSupportedImageFile(droppedFile.Extension))
                { 
                    //创建图片边框border 在border里放置图片
                    Border imagePlaceHolder = new Border()
                    {
                        Child = CreateImage(droppedFile),
                        Background = transParentColor,
                        Margin = new Thickness(10.0),
                        Cursor = Cursors.Hand
                    };

                    //显示图片的tooltip信息
                    ToolTipService.SetToolTip(imagePlaceHolder, droppedFile.Name);
                    //鼠标移到或移除图片上时,改变图片边框颜色
                    imagePlaceHolder.MouseEnter += new MouseEventHandler(imagePlaceHolder_MouseEnter);
                    imagePlaceHolder.MouseLeave += new MouseEventHandler(imagePlaceHolder_MouseLeave);

                    //把这个子对象添加到imageContainer里进行显示。
                    imageContainer.Children.Add(imagePlaceHolder);
                }
            }
        }

        void imagePlaceHolder_MouseLeave(object sender, MouseEventArgs e)
        {
            (sender as Border).Background = transParentColor;
        }

        void imagePlaceHolder_MouseEnter(object sender, MouseEventArgs e)
        {
            (sender as Border).Background = highLightColor;
        }

        private Image CreateImage(FileInfo droppedFile)
        {
            //读取Drop拖拽进来的文件转换成image格式文件
            using (FileStream fileStream = droppedFile.OpenRead())
            {
                BitmapImage bitmapImage = new BitmapImage();
                bitmapImage.SetSource(fileStream);
                return new Image()
                {
                    Source = bitmapImage,
                    Width = 100,
                    Margin = new Thickness(5.0)
                };
            }
        }

        private bool IsSupportedImageFile(string extension)
        {
            switch (extension.Trim().ToLower())
            { 
                case ".jpg":
                case ".png":
                    return true;
                default: break;
            }
            return false;
        }
    }
}


 源代码:  http://download.csdn.net/detail/eric_k1m/5832317

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值