web-dev-qa-db-fra.com

Que signifie "capturer la souris" dans WPF?

Sur System.Windows.UIElement, Il existe une méthode CaptureMouse() et une méthode ReleaseMouseCapture() appariée. Dans cet exemple WPF DragDrop , ils appellent CaptureMouse sur MouseDown et le libèrent sur MouseUp. la documentation dans MSDN est à peu près aussi inutile que possible - "CaptureMouse -> Capture la souris".

Dans ma tête avant de l'essayer, j'ai supposé qu'il avait en quelque sorte verrouillé la souris à l'intérieur des limites de UIElement, mais ce n'est clairement pas le cas lorsque je l'essaie. De l'expérimentation, il semble avoir quelque chose à voir avec la réponse aux événements lorsque la souris est en dehors de l'UIElement, mais ne voulant pas être un programmeur culte du fret Je ne veux pas simplement l'utiliser parce que le exemple, je voudrais une description faisant autorité de ce que cela signifie.

68
Eclipse

De capturer et décapturer la souris sur MSDN:

Lorsqu'un objet capture la souris, tous les événements liés à la souris sont traités comme si l'objet avec capture de souris exécutait l'événement, même si le pointeur de la souris se trouvait sur un autre objet.

La capture de la souris est utile pour faire glisser car seul le contrôle de capture reçoit les événements de la souris jusqu'à ce qu'il soit relâché. Tout le code de glissement peut exister dans le même contrôle, plutôt que d'être réparti sur plusieurs contrôles.

76

Une fois qu'il a capturé la souris, un contrôle recevra des événements de souris même si le pointeur de la souris n'est plus dans sa zone de délimitation.

En règle générale, il est utilisé pour:

  • Glisser déposer
  • Boutons (pour gérer la souris vers le haut lorsque vous posez la souris sur le bouton et déplacez la souris avant de relâcher le bouton)
12
Alun Harford

Le documentation Silverlight 2 car il a une description plus détaillée, je ne sais pas pourquoi il ne fait pas aussi partie de la page de documentation 3.5:

Lorsqu'un objet a capturé la souris, cet objet reçoit une entrée de la souris, que le pointeur de la souris se trouve ou non dans sa zone de délimitation. La souris n'est généralement capturée que lors d'opérations de glissement simulées.
...

Il fonctionne de la même façon avec WPF, et donc la raison pour laquelle il est utilisé avec DragDrop, c'est qu'il sait comment signaler au contrôle en cours de déplacement lorsque la souris peut être en dehors de ce contrôle. Si vous commentez MyCanvas.Capture () et Capture (Null) (qui l'efface), vous ne pouvez plus supprimer.

4
rmoore