WPF鼠标拖放功能(拖放图片,文本)

      对于拖放操作有两个方面:源和目标。为了创建拖放源,需要在某个位置调用DragDrop.DoDragDrop()方法初始化拖放操作。此时确定拖动操作的源,搁置希望移动的内容,并指明充许什么样的拖放效果(复制,移动等)。

      通常会在响应PreviewMouseDown或MouseDown事件时,调用DoDragDrop()方法。

      而接收的元素需要将它的AllowDrop属性设置为true,还需要通过处理Drop事件来处理数据。

 前台代码:

    <Grid>
        <Grid.RowDefinitions>
            <RowDefinition Height="*"></RowDefinition>
            <RowDefinition Height="*"></RowDefinition>
        </Grid.RowDefinitions>
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="*"></ColumnDefinition>
            <ColumnDefinition Width="*"></ColumnDefinition>
        </Grid.ColumnDefinitions>
        <TextBox Name="source" Grid.Row="0" Background="Purple" Foreground="White" MouseDown="source_MouseDown">博客园:www.cnblogs.com</TextBox>
        <Image Source="http://static.cnblogs.com/images/logo_small.gif" Grid.Column="1" Stretch="None" MouseDown="Image_MouseDown"></Image>
        <Label Name="target" Grid.Row="1" Background="YellowGreen" AllowDrop="True" Drop="OnDrop">文本拖到这里</Label>
        <Image Name="targetImg" Grid.Row="1" Grid.Column="1" AllowDrop="True" Drop="targetImg_Drop_1" Stretch="None" Source="http://www.baidu.com/img/baidu_sylogo1.gif"></Image>
    </Grid>

 

后台代码:

        /// <summary>
        
/// 文本源数据
        
/// </summary>
        private void source_MouseDown(object sender, MouseButtonEventArgs e)
        {
            TextBox objText = sender as TextBox;
            DragDrop.DoDragDrop(objText, objText, DragDropEffects.Copy);
        }

        /// <summary>
        
/// 图片源数据
        
/// </summary>
        private void Image_MouseDown(object sender, MouseButtonEventArgs e)
        {
            Image objImage = sender as Image;
            DragDrop.DoDragDrop(objImage, objImage.Source, DragDropEffects.Copy);
        }


        /// <summary>
        
/// 目标位置
        
/// </summary>
        private void OnDrop(object sender, DragEventArgs e)
        {
            if (e.Data.GetDataPresent(DataFormats.Text))
                e.Effects = DragDropEffects.Copy;
            else
                return;

            this.target.Content = e.Data.GetData(DataFormats.Text);
        }


        private void targetImg_Drop_1(object sender, DragEventArgs e)
        {
            e.Data.GetFormats();
            if (e.Data.GetDataPresent("System.Windows.Media.Imaging.BitmapFrameDecode"))
                e.Effects = DragDropEffects.Copy;
            else
            {
                return;
            }
            // targetImg.Source = (ImageSource)e.Data.GetData("System.Windows.Media.Imaging.BitmapFrameDecode");
            ((Image)sender).Source = (ImageSource)e.Data.GetData("System.Windows.Media.Imaging.BitmapFrameDecode");
        }

 

     如果不知道拖放源数据是什么数据类型,可以使用实现了IDataObject接口的GetFormats()方法。如:   e.Data.GetFormats();  其中Data就实现了IDataObject接口。

 

 

posted @ 2012-09-23 23:30  ゞ追忆o0ゞ  阅读(3882)  评论(1编辑  收藏  举报