2010-07-16 11 views
4

J'ai créé un contrôle de test très simple qui a un Rectangle sur une toile (dans d'autres conteneurs, mais sans conséquence). Le Rectangle dispose de gestionnaires d'événements pour la souris, le déplacement de la souris et la souris. Si je capture la souris dans l'événement MouseLeftButtonDown du rectangle, je ne reçois pas un événement MouseLeftButtonUp correspondant.Perte des événements de la souris Silverlight après la capture de la souris?

Certains code:

private void rect1_MouseLeftButtonDown(object sender, MouseButtonEventArgs e) 
{ 
    if (_captured = CaptureMouse()) 
    { 
     _offset = new Point(Canvas.GetLeft(rect1), Canvas.GetTop(rect1)); 
     _origin = e.GetPosition(RootCanvas); 
     e.Handled = true; 
    } 
} 


private void rect1_MouseLeftButtonUp(object sender, MouseButtonEventArgs e) 
{ 
    if (_captured) 
    { 
     ReleaseMouseCapture(); 
     _captured = false; 
     e.Handled = true; 
    } 
} 

J'attaché des gestionnaires d'événements pour les éléments de conteneurs et, juste pour se assurer un d'entre eux ne recevait pas l'événement de la souris en quelque sorte, mais aucun d'entre eux étaient. Y a-t-il une attente dans Silverlight que je n'ai pas encore apprise?

+0

J'ai remarqué un problème similaire dans une application WPF que je suis en train de développer, mais je l'ai ignoré car j'essayais de capturer la souris lorsque les autres boutons de la souris étaient pressés. Ayant réalisé que cela ne fonctionnait pas pour autre chose que le bouton gauche, j'ai abandonné cette approche et je n'ai pas étudié le problème plus avant. – ChrisF

Répondre

2

Je pense que vous êtes un peu confus au sujet de ce qui capture réellement les événements de la souris.

Tenir compte quand vous faites ceci: -

if (_captured = CaptureMouse()) 

quel objet est le CaptureMouse effectivement appelé contre?

Réponse: Le contrôle utilisateur pour lequel votre code est le code-behind. Si vous aviez voulu le rectangle pour capturer la souris que vous feriez: -

if (_captured = rect1.CaptureMouse()) 
+0

Pas tellement confus que ne pas faire attention. C'est mon moment de facepalm du jour. Merci d'avoir signalé ce qui aurait dû être évident. – redman

1

CaptureMouse(); de mouseDown Event, puis essayez.