2010-10-06 35 views
2

J'ai un projet wpf qui utilise des fenêtres transparentes et je partage ce style de fenêtre transparente pour mes fenêtres de dialogue et mes mainwindow.wpf - transparent MainWindow et problèmes avec DragMove "Peut seulement appeler DragMove lorsque le bouton principal de la souris est enfoncé."

Je reçois une erreur sur mon DragMove() événement de mon MainWindow APRES Je ferme une boîte de dialogue qui utilise le même style de fenêtre. Pour rendre encore plus étrange cette exception se produit uniquement lorsque je gère un événement mouseleftbutton sur une étiquette dans mon Status Bar sur le MainWindow. SI j'échange l'étiquette pour un bouton et remplace le mouseleftbuttondown avec un événement click je ne reçois pas l'erreur.

La chose étrange est que la fenêtre de dialogue qui apparaît n'implémente pas dragmove, et je ne fais pas glisser mon mainwindow non plus. D'une manière ou d'une autre, dragmove est appelé après que mon exécution de code soit revenue au mainwindow après un appel showdialog().

Une solution facile pour moi actuellement est d'échanger mon étiquette pour un bouton et de câbler l'événement de clic à la place.

Cependant, je suis plus intéressé à connaître les causes de ce problème et pourquoi un événement click fonctionne mais que la souris échoue lamentablement.

Mon "StatusBar" est simplement un stackpanel avec des étiquettes et d'autres panneaux de pile (qui contiennent plus d'étiquettes).

Est-ce que quelqu'un d'autre a déjà combattu ce problème? Aurais-je besoin d'implémenter une sorte de substitution de gestionnaire d'événements mouseclick afin que je puisse capturer et annuler cette exception de se produire?

Le code de repro peut être fourni si nécessaire. J'ai eu assez de hits sur dragmove ici, donc j'espère que c'est un facile pour quelqu'un là-bas.

Merci d'avance pour toute aide!

Répondre

3

mon cerveau ne fonctionne pas correctement aujourd'hui. J'ai oublié le routage des événements dans ce scénario. J'ai simplement dû définir la propriété Handled sur mon routedevent qui s'est déclenchée lorsque le bouton de la souris était enfoncé. D'une certaine façon, j'ai manqué cela dans le débogueur avant de poster le fil.

1

La « bonne » façon de faire un mobile fenêtre sans bordure ->https://stackoverflow.com/a/3275712/146032

Assurez-vous d'appeler uniquement DragMove lorsqu'elle est déclenchée par l'événement MouseLeftButtonDown et ne pas oublier de gérer l'événement en utilisant e.Handled = true;

+0

C'est un bon lien, mais cela n'a rien à voir avec mon problème ici. J'ai eu une bulle en fuite qui a tout chamboulé. Mon dialogue qui est apparu n'a même pas implémenté dragmove donc il n'y avait aucun moyen de le faire glisser. – TWood