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接口。

 

 

时间: 2024-10-13 16:34:54

WPF鼠标拖放功能(拖放图片,文本)的相关文章

利用Atlas库为Web页面加入鼠标拖放功能

web|鼠标|页面 摘要 有时,AJAX看上去为web页面平添了一分神秘的色彩.如果页面能够支持一些小件(例如图像和文本块)的拖放操作,那么,这明显会使访问者眼前一亮.在本文中,你会看到,利用微软Atlas你也会非常容易地在客户端实现类似的鼠标拖放功能. 一. 引言 你能够把一个相当酷的特征添加到你的Web应用程序中:使用户能够定制自己的页面的外观感觉.并且,在经常情况下,用户都喜欢重新安排页面部分以适合他们自己的查看习惯.不妨让我们设想这样的情景:用户导航到某一个网站,能够选择其中的一部分(例

学Silverlight 2系列(5):实现简单的拖放功能

本文为系列文章第五篇,利用前面讲过的鼠标事件处理实现简单的拖放功能 . 准备XAML 在实现拖放功能中,分为三个步骤: 1.按下鼠标,触发MouseLeftButtonDown事件,选择要拖动的对象. 2.移动鼠标,触发MouseMove事件,移动选择的对象. 3.放开鼠标,触发MouseLeftButtonUp事件,停止捕捉事件. 做一个简单的界面,用一个按钮来显示拖放,如下XAML声明: <Canvas Background="#46461F"> <Button

VC控件“树”中多选拖放功能的实现

控件"树"(tree)能够清晰地显示所包含数据的继承关系,是一个强有力的控件.但是真正掌握并能运用CTreeCtrl类的众多特性并不是一件容易的事情.在Visual C++ Developer杂志的9月份.10月份这两期中,Stephen介绍了两个类CBitmapTree和CCheckableTree的用法,这两个类可以扩展和简化类CTreeCtrl.在这篇文章里,将主要介绍类CBitmapTree的升级版,它可以简化往"树"控件中添加拖放功能的过程,而且还可以实现

C++ Builder中实现拖放功能

Windows中的拖放功能大家一定很熟悉了,如文件的转移,拷贝等操作用鼠标轻轻一拖即可,在编写程序中有时也用到拖放,那么如何实现呢?现以C++ Builder5(简称CB5)为例,分析拖放功能的具体实现. 一.工具条的拖放 ---- 要实现拖放功能,首先必须了解几个与拖放有关的属性和方法, 对于TControl控件,CB5提供了三个属性,DockSite,DragKind和DragMode.灵活运用这三个属性会得到意想不到的效果.这三个属性的意义是: ---- DockSite:指定当前控件是否

如何在对话框中实现文件拖放功能

如何在对话框中实现文件拖放功能 在对话框上添加一个Picture Control,然后把Accept Files属性修改成True.如果是想托图片的话需要把Type改成Bitmap. 在头文件里加入:afx_msg void OnDropFiles(HDROP hDropInfo); 在cpp文件里加入:ON_WM_DROPFILES() 在OnInitDialog()的最后加入:DragAcceptFiles(TRUE); 在cpp文件里添加:void CTestDragDlg::OnDrop

JavaScript实现网页对象拖放功能的方法_javascript技巧

本文实例讲述了JavaScript实现网页对象拖放功能的方法.分享给大家供大家参考.具体如下: <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <title>Drag</title> <meta http-equiv=

Excel填充柄和单元格拖放功能如何取消

  1.打开Excel表格,拖动单元格,我们会发现自动自带填充柄拖放功能. 2.点击工具栏的"文件"→"选项" 3.在Excel选项里选择"高级",接着将"启用填充柄和单元格拖放功能"前面的勾去除. 4.返回工作表后我们就会发现无法对单元格进行拖放啦

Word中无法使用拖放功能

  在使用Word编辑文档的时候,Word中选定文字时,不能保持选定状态,无法使用拖放功能选定文字,放到其他位置. 出现这种情况可能是没有开启拖放式文本编辑功能,可以根据以下方法开启. 选择"工具"→"选项".切换到"编辑",选中"拖放式文字编辑",单击确定,即完成了设置.

js实现跟随鼠标移动且带关闭功能的图片广告实例_javascript技巧

本文实例讲述了js实现跟随鼠标移动且带关闭功能的图片广告.分享给大家供大家参考.具体实现方法如下: 复制代码 代码如下: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xh

ajax实现拖放功能,有些难度,高人指点

问题描述 拖放功能研究了一下,但是对于我的功能需求是否能实现呢,目前我项目中是asp.net2.0开发的目前项目中要实现这样的一个预定功能在后台我用服务器的table由tablerow和tabcell动态生成表格,tablecell.里面的数据是读取数据库的数据表格的列和行书,都市不确定的比如===time资源1资源28:00李先生8:30李小姐........主要是要实现这样的功能,比如,我把"李先生"拖放到8:30的资源2这个地方,然后保存下来这样,当数据再次load的时候,就在这