繁体   English   中英

在WPF中拖放

[英]Drag drop in WPF

我有拖拽实现的WPF应用程序......每当我在Grid上拖动树项目时,它都会被该GridDragDrop事件处理,但每次它被解雇两次可能是什么原因?

下面是在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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM