2009-09-01 3 views
3

Je application WPF avec glisser-n inmplementation ... Chaque fois que je fais glisser élément de l'arbre sur une Grid il est traité par DragDrop événement de ce Grid, mais chaque fois qu'il me tiré deux coups ce pourrait être la raison?chute de glisser dans WPF

Code est ci-dessous pour la mise en œuvre goutte de glisser sur une 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);         
      } 
     } 
    } 
} 

Répondre

-1

Je pense que cela est une bonne méthode pour glisser & déposer

Une bonne façon pour darg et baisse sont expliquées comme

Détecter un glisser en tant que combinaison de MouseMove et MouseLeftButtonDown

Trouvez les données que vous voulez dr ag et crée un DataObject qui contient le format, les données et les effets autorisés.

Initié le traînement en appelant DoDragDrop()

Définissez la propriété AllowDrop True sur les éléments que vous souhaitez autoriser la chute.

Enregistrez un gestionnaire dans l'événement DragEnter pour détecter un glissement sur l'emplacement de dépôt. Vérifiez le format et les données en appelant GetDataPresent() sur les arguments d'événement. Si les données peuvent être supprimées, définissez la propriété Effect sur les arguments d'événement pour afficher le curseur de souris approprié.

Lorsque l'utilisateur relâche le bouton de la souris, l'événement DragDrop est appelé. Obtenez les données en appelant la méthode GetData() sur l'objet de données fourni dans les arguments d'événement.

Vous pouvez trouver l'article complet here

3

J'ai eu à peu près le même problème: j'ai commencé l'événement glisser sur MouseMove et avait un événement de baisse sur certains TreeViewItems. Après le premier tir de l'événement drop, il tirait une seconde fois mais la cible serait un élément différent (dans mon cas, le parent de celui qui était ma cible).

Pour le résoudre, j'ai dû définir e.Handled = true dans l'événement Drop.