WPF中的拖放(一)

拖放在C/S开发过程中总是一个难点,但是,为了得到更好的用户体验,很多地方还是需要使用到拖放的,今天,我们介绍一下WPF的拖放。

还是以往的惯例,用实例来说明WPF的拖放是如何实现的。

我们要实现的就是让左边的红色矩形移动到右边。首先,我们先编写xaml文件,代码如下

1
2
3
4
5
6
7
8
9
10
11
<Window x:Class= "DragDropDemo1.Window1"
    Title= "Window1" Height= "319" Width= "494" >
    <Grid>
        <Canvas Margin= "14,19,216,20" Name= "canvas1" Background= "Azure" >
            <Rectangle Height= "53" Name= "rectangle1" Stroke= "Black" Width= "91" Fill= "Crimson" />
        </Canvas>
        <Canvas HorizontalAlignment= "Right" Margin= "0,22,5,21" Name= "canvas2" Width= "199" Background= "DarkSalmon" AllowDrop= "True" />
    </Grid>
</Window>

接着,我们来实现拖放中的拖,这个是最重要的部分,首先,我们注册矩形的PreviewMouseMove事件。代码如下:

1
2
3
4
5
6
7
8
9
10
this .rectangle1.PreviewMouseMove += new MouseEventHandler(rectangle1_PreviewMouseMove);
void rectangle1_PreviewMouseMove( object sender, MouseEventArgs e)
{
    if (e.LeftButton == MouseButtonState.Pressed)
    {
        DataObject data = new DataObject( typeof (Rectangle), this .rectangle1);
        DragDrop.DoDragDrop( this .rectangle1, data, DragDropEffects.Move);
    }
}

需要说明的是这里的data就是我们拖放时的实际数据,我们使用DragDrop.DoDragDrop()方法启动拖放操作,将数据带入拖放操作中。

接下来,我们实现放置操作,将拖放的数据放置到相应的控件上。所以我们首先要设置放置对象的AllowDrop=”True”属性,让其具有可以放置的特性,接着实现放置控件的DragOver(拖动完成),Drop(放置)事件。代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
this .canvas2.DragOver += new DragEventHandler(canvas2_DragOver);
this .canvas2.Drop += new DragEventHandler(canvas2_Drop);
void canvas2_DragOver( object sender, DragEventArgs e)
{
    if (!e.Data.GetDataPresent( typeof (Rectangle)))
    {
        e.Effects = DragDropEffects.None;
        e.Handled = true ;
    }
}
void canvas2_Drop( object sender, DragEventArgs e)
{
    IDataObject data = e.Data;
    if (data.GetDataPresent( typeof (Rectangle)))
    {
        Rectangle rect = data.GetData( typeof (Rectangle)) as Rectangle;
        this .canvas1.Children.Remove(rect);
        this .canvas2.Children.Add(rect);
    }
}

我们在DragOver中判断拖动中的数据数据类型是否是我们放置的数据类型,如果不是则停止拖放。我们在Drop事件中将对象放置,即完成所有拖放操作。通过上面代码可以很好的完成一些简单拖放,后面我们会介绍,拖放时如何让对象跟随鼠标等效果。
代码下载

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值