为了账号安全,请及时绑定邮箱和手机立即绑定

WPF拖拽实现

WPF拖拽实现

慕勒3428872 2018-12-06 16:23:52
对于WPF拖拽问题网上有很多,一般就是一个控件的移动,今天想做一个效果,效果是这样的: 页面分左右两部分,左边是canvas是空的,右边的canvas中有一个矩形,我要把矩形拖到到左侧,拖完后右侧的矩形不消失,也就是说在左边复制了一个矩形,以下是代码  public StackPanel()        {            InitializeComponent();            this.rectImage.PreviewMouseMove += new MouseEventHandler(rect_PreviewMouseMove);            this.Canvas1 .DragOver +=new DragEventHandler(Canvas1_DragOver);            this.Canvas1.Drop += new DragEventHandler(Canvas1_Drop);        }        void rect_PreviewMouseMove(object sender, MouseEventArgs e)        {            if (e.LeftButton == MouseButtonState.Pressed)            {                DataObject data = new DataObject(typeof(Rectangle), this.rectImage);                DragDrop.DoDragDrop(this.rectImage, data, DragDropEffects.Move);            }        }        void Canvas1_DragOver(object sender, DragEventArgs e)        {            if (!e.Data.GetDataPresent(typeof(Rectangle)))            {                e.Effects = DragDropEffects.None;                e.Handled = true;            }        }        void Canvas1_Drop(object sender, DragEventArgs e)        {            IDataObject data =new DataObject ();            data= e.Data;            if (data.GetDataPresent(typeof(Rectangle)))            {                Rectangle rect = new Rectangle();                rect = data.GetData(typeof(Rectangle)) as Rectangle;                this.Canvas2.Children.Remove(rect);                this.Canvas1.Children.Add(rect);            }        } 上面的代码实现的是移动后右侧的矩形就消失了,但是我想不消失,但是把 this.Canvas2.Children.Remove(rect);这句代码注释了后就会报错,这里该怎么做呢,为什么会出现这个错呢?我刚接触WPF,不明白,高手帮忙
查看完整描述

3 回答

?
MYYA

TA贡献1868条经验 获得超4个赞

先记住右边矩形的位置,然后在Remove之后,在右边原来矩形的位置再复制一个矩形。

查看完整回答
反对 回复 2019-01-21
?
HUX布斯

TA贡献1876条经验 获得超6个赞

您好,我想问一下,WPF默认的DragDrop类不能实现这样的吗?还有所谓的DragDropEffect里的枚举又有什么用呢?应该是有关联的吧
查看完整回答
反对 回复 2019-01-21
  • 3 回答
  • 0 关注
  • 560 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信