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

  • 相关阅读:
    设计模式 对象结构型 代理模式
    设计模式 对象/类结构型 适配器模式
    设计模式 创建型 原型模式
    设计模式 创建型 建造模式
    Django REST framework使用及源码分析之权限
    Django REST framework使用及源码分析之验证
    某游戏公司运维开发python笔试题
    django中间件的5个方法以及csrf的装饰器用法
    Django源码理解一
    消息中间件-RabbitMQ
  • 原文地址:https://www.cnblogs.com/zhuiyi/p/2699379.html
Copyright © 2011-2022 走看看