#695 – 实现一个简单的拖拽(Implementing Drag-and-Drop Behavior)

来源:互联网 发布:mac 录音专业版 编辑:程序博客网 时间:2024/06/05 01:06

下面例子中的代码实现了从一个TextBox 中拖拽文字到一个ListBox 里。

在XAML中,我们指定TextBoxMouseDown 事件处理韩式和ListBoxDrop 事件处理函数。并且要设置ListBoxAllowDrop 属性为true(表示允许接收拖拽的输入).

<StackPanel Orientation="Vertical" Grid.Column="0" Margin="10">    <Label Content="Enter some text and then drag to list"/>    <TextBox Text="" MouseDown="txtMouseDown"/></StackPanel><ListBox Grid.Column="1" Margin="10" AllowDrop="True" Drop="lbDrop"/>

TextBoxMouseDown 事件处理函数中,我们执行DragDrop.DoDragDrop 静态方法(可以理解为将要拖动的数据进行“装车”,等待出发)。

private void txtMouseDown(object sender, MouseButtonEventArgs e){    TextBox txtElement = e.Source as TextBox;     DragDrop.DoDragDrop(txtElement, txtElement.SelectedText, DragDropEffects.Copy);}

ListBoxDrop 事件处理函数中我们对拖拽接收到的数据进行处理,添加到列表中去。

private void lbDrop(object sender, DragEventArgs e){    string draggedText = (string)e.Data.GetData(DataFormats.StringFormat); // 设置接受的数据类型为文本     ListBox lbox = e.Source as ListBox;    lbox.Items.Add(draggedText);}

我们设置了某个控件的AllowDrop 属性为true以后,这个控件就可以接受各种拖拽过来的数据,但是并不是所有的数据它都想接受,因此我们可以通过调用IDataObject.GetData 方法来指定要接收的目标数据类型。比如在上面的例子中设置接受的数据类型为文本。

在我们调用了DragDrop.DoDragDrop 函数,指定了要进行拖传递的数据后,这些数据不仅可以在当前应用程序内传递,还可以传递给其他的应用程序。例如将你的文本,图片之类的数据传递给Word文档。



********************************************译者注*****************************************
DragDrop.DoDragDrop 是一个阻塞函数,如果整个拖拽动作(拖动目标->移动->放开)没有完成,它是不会返回的,会阻塞后面的函数。
在拖拽事件中如果想获取鼠标当前的坐标应该使用DragEventArgs的GetPosition函数,Mouse.GetPosition 在拖拽的时候无法获取到鼠标位置。


0 0
原创粉丝点击