[英]Drag drop in WPF
我有拖拽实现的WPF应用程序......每当我在Grid
上拖动树项目时,它都会被该Grid
的DragDrop
事件处理,但每次它被解雇两次可能是什么原因?
下面是在TreeView
上实现拖放的代码:
void treeViewGroups_MouseMove(object sender, MouseEventArgs e)
{
try
{
if (e.LeftButton == System.Windows.Input.MouseButtonState.Pressed)
{
Point position = e.GetPosition(null);
if (Math.Abs(position.X - this.startPoint.X) > SystemParameters.MinimumHorizontalDragDistance || Math.Abs(position.Y - this.startPoint.Y) > SystemParameters.MinimumVerticalDragDistance)
{
DataRowView treeViewItem = this.treeViewGroups.SelectedItem as DataRowView;
if (treeViewItem != null)
if ((treeViewItem.Row.Table.TableName == "TableGroup"))
{
ViewTaxSCConstants.dragElement = treeViewItem;
Dispatcher.BeginInvoke(System.Windows.Threading.DispatcherPriority.Render, new System.Threading.ParameterizedThreadStart(DoDragDrop), treeViewItem);
}
}
}
}
我有几乎相同的问题:我在MouseMove上启动了拖动事件,并在某些TreeViewItems上有一个drop事件。 在首先触发drop事件之后,它会再次触发,但目标将是一个不同的元素(在我的情况下,是我的目标的父元素)。
要解决这个问题,我必须在Drop事件中设置e.Handled = true
。
我认为这是拖放的好方法
解释darg和drop的好方法
检测拖动作为MouseMove和MouseLeftButtonDown的组合
找到要拖动的数据并创建包含格式,数据和允许的效果的DataObject。
通过调用DoDragDrop()启动拖动
在要允许删除的元素上将AllowDrop属性设置为True。
将处理程序注册到DragEnter事件以检测拖放位置上的拖动。 通过在事件args上调用GetDataPresent()来检查格式和数据。 如果可以删除数据,请在事件参数上设置Effect属性以显示相应的鼠标光标。
当用户释放鼠标按钮时,将调用DragDrop事件。 通过在事件args中提供的Data对象上调用GetData()方法来获取数据。
你可以在这里找到完整的文章
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.