Événement MouseMove dans WPF
Dans WPF lorsque l'événement est déclenché, je veux vérifier si la touche gauche de la souris est pressé, si elle est pressée, je veux faire un calcul.
J'ai essayé ceci:
private void Window_MouseMove(object sender, MouseEventArgs e)
{
if (e.LeftButton == MouseButtonState.Pressed)
{
Calculate();
}
}
Mais quand je clic gauche et maintenez enfoncé et déplacez la souris dans l'écran de la Calculer() qu'est appelée une seule fois (j'.e lorsque la souris commence à se déplacer), après que, peu importe où je bouge la souris, la méthode n'est pas appelée.
Je veux le Calculer() méthode pour obtenir appelé à plusieurs reprises alors que la souris est en mouvement, et pendant que la touche gauche de la souris est enfoncé.
- Êtes-vous sûr que ce n'est pas quelque chose d'autre? Un test simple pour moi montre MouseMove toujours être appelé, même si le bouton gauche de la souris est enfoncé.
- hmm ... étrange - mais tu ne peux pas définir un indicateur (et MouseCapture?) sur LButtonDown et relâchez-le drapeau (et capture) sur LButtonUp? Semble un peu plus propre pour moi et devrait fonctionner.
- ouais mais peut-être que l'e.LeftButton état est défini uniquement à droite après le bouton a été pressé - ce qui semble être le problème ici.
- C'est vrai de l'événement MouseMove est appelé bien. Mais l'Calculer la méthode n'est appelée qu'une seule fois, je veux qu'il soit appelé à plusieurs reprises pendant que la souris se déplace.
Vous devez vous connecter pour publier un commentaire.
Un test simple pour moi indique ce de travail:
Une soupçonne que votre
Calculate
méthode est une méthode synchrone qui est à l'origine des problèmes.Essayer d'appeler la méthode comme ci-dessous. Cela va démarrer la méthode calculate dans un nouveau thread. Ensuite, la mise à jour de la zone de texte qui va se passer dans le fil d'origine.
Si vous travaillez avec élément dérivé à partir du Panneau de la classe, il déclenche des événements de souris seulement lorsque c'est le Fond de jeu de propriétés.
J'ai vérifié qu'il fonctionne. Si je maintiens le bouton de la souris et déplacez-la sur la fenêtre, la fonction est appelée plusieurs fois, tant que je bouge la souris sur la fenêtre. Peut-être votre Calculer la fonction prend beaucoup de temps à s'exécuter et de revenir en arrière. C'est donc un long temps avant qu'il soit appelé de nouveau de retour. Dans ce cas, l'utilisation de plusieurs threads à Calculer().
Pour tester que cela fonctionne, j'ai ajouté une étiquette de Fenêtre et de mettre une étiquette de ligne.Contenu = DateTime.Maintenant.Tiques; au lieu de la calculer func ici. Il conserve la mise à jour de la valeur.
Le cas échéant, le CRectTracker::fonction de Suivi de la capture à la souris jusqu'à ce que l'utilisateur relâche le bouton gauche de la souris.
http://msdn.microsoft.com/en-us/library/ttwy7427.aspx