WPF中的拖放(一)

2010年2月10日 分类: WPF

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

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

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

<Window x:Class="DragDropDemo1.Window1"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    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事件。代码如下:

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(放置)事件。代码如下:

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事件中将对象放置,即完成所有拖放操作。通过上面代码可以很好的完成一些简单拖放,后面我们会介绍,拖放时如何让对象跟随鼠标等效果。
代码下载

原创文章,转载请注明: 转载自.NET开发者

本文链接地址: WPF中的拖放(一)

文章的脚注信息由WordPress的wp-posturl插件自动生成

Related posts:

  1. WPF实现动态换肤功能(一)
  2. WPF无边框透明窗体的缩放
  3. WPF中的拖放(三)
  4. WPF中的拖放(二)
  5. Silverlight/WPF中的布局
标签: ,
目前还没有任何评论.

Leave a Comment