Перетащите в WPF - PullRequest
       17

Перетащите в WPF

3 голосов
/ 01 сентября 2009

У меня есть приложение WPF с реализацией drag-n-drop ... Всякий раз, когда я перетаскиваю элемент дерева на Grid, он обрабатывается DragDrop событием этого Grid, но каждый раз, когда запускается дважды , в чем может быть причина?

Ниже приведен код для реализации перетаскивания на 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);                                
           }
        }
     }
}

Ответы [ 2 ]

3 голосов
/ 11 мая 2015

У меня была почти такая же проблема: я запустил событие перетаскивания на MouseMove и у меня было событие сброса на некоторых TreeViewItems. После того, как событие падения сработало первым, оно сработает во второй раз, но целью будет другой элемент (в моем случае, родительский элемент того, который был моей целью).

Чтобы решить эту проблему, я должен был установить e.Handled = true в событии Drop.

0 голосов
/ 08 сентября 2009

Я думаю, что это хороший метод для Drag & Drop

Хороший способ для штопки и дропа объясняется как

Определить перетаскивание как комбинацию MouseMove и MouseLeftButtonDown

Найдите данные, которые вы хотите перетащить, и создайте объект DataObject, содержащий формат, данные и разрешенные эффекты.

Инициируйте перетаскивание, вызвав DoDragDrop ()

Установите для свойства AllowDrop значение True для элементов, которые вы хотите разрешить удаление.

Зарегистрируйте обработчик для события DragEnter, чтобы обнаружить перетаскивание по месту размещения. Проверьте формат и данные, вызвав GetDataPresent () для аргументов события. Если данные могут быть отброшены, установите свойство Effect в аргументах события, чтобы отобразить соответствующий курсор мыши.

Когда пользователь отпускает кнопку мыши, вызывается событие DragDrop. Получите данные, вызвав метод GetData () для объекта Data, указанного в аргументах события.

Вы можете найти полную статью здесь

...