2011-03-14 1 views
3

Dans notre application, nous hébergeons un petit WPF Listbox à l'intérieur d'un hôte élément, nous mettons en œuvre le glisser-déposer en utilisant l'événement PreviewMouseDown ...Comment implémenter glisser-déposer à partir d'un petit hôte élément WPF dans une application Winforms?

private void Border_PreviewMouseMove(object sender, MouseEventArgs e) 
     { 
      // Get the current mouse position 
      Point mousePos = e.GetPosition(null); 
      Vector diff = startPoint - mousePos; 

      if (e.LeftButton == MouseButtonState.Pressed && 
       Math.Abs(diff.X) > SystemParameters.MinimumHorizontalDragDistance && 
       Math.Abs(diff.Y) > SystemParameters.MinimumVerticalDragDistance) 
      { 
       OnDragStarted(e);     
      } 

     } 

Le problème que nous voyons est que lorsque je clique et faites glisser un élément assez rapidement, le contrôle WPF déclenche seulement un événement PreviewMouseMove avant que la souris ne quitte Elementhost, donc l'opération de glisser n'est pas démarrée tant que la souris n'est pas retournée à Elementhost et qu'un autre événement PreviewMouseMove est déclenché.

Y a-t-il une manière robuste de manipuler ce cas?

Répondre

2

Vous devez capturer la souris sur l'événement de souris vers le bas. Toute souris qui se déplace après cela est toujours routée vers votre fenêtre, même si le curseur ne la survole plus. Utilisez la méthode Mouse.Capture() dans WPF.

+0

MERCI! Ce problème a été plauging mon application depuis longtemps et maintenant il est finalement fixé. J'appelle Child.CaptureMouse() dans l'événement de souris de prévisualisation et Child.ReleaseMouseCapture() dans l'événement Aperçu de la souris. – Andy

Questions connexes