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:
