2009-05-15 10 views
3

J'ai un bouton qui, lorsqu'on clique dessus, ouvre un popup. Le Popup est un sous-menu contenant plus de boutons. Lorsque l'un des boutons du sous-menu est cliqué, le popup se ferme. Je veux également que le Popup se ferme lorsque l'utilisateur clique quelque part en dehors du Popup. Il est également important de noter que la majorité de l'écran est occupée par un WindowsFormsHost qui affiche un contrôle OpenGL Win Forms.Comment fermer les fenêtres contextuelles utilisées en tant que sous-menus dans WPF

Fermeture du menu contextuel lorsque j'ai cliqué sur un bouton de sous-menu. Dans le gestionnaire de clic pour ces boutons, je ferme le popup. Cependant, la fermeture du Popup lorsque vous cliquez ailleurs est l'endroit où j'ai rencontré un problème.

choses que j'ai essayé:

Réglage PopUp.StaysOpen false. Cela fonctionne en ce que lorsque vous cliquez ailleurs sur l'écran, le Popup se ferme. Cependant, sur le contrôle Win Forms, il semble que vous ayez besoin d'un clic pour fermer le popup, puis d'un second clic pour effectuer n'importe quelle action. Ceci est très indésirable.

J'ai essayé de gérer l'événement LostFocus pour le bouton qui ouvre le menu contextuel et définit StaysOpen sur true. Cela fonctionne en ce que cliquant sur le Popup ne nécessite pas le deuxième clic sur le contrôle Win Forms. Le problème est maintenant que l'événement LostFocus est géré et le Popup fermé avant de lire un clic sur les boutons sur le popup. Cela rend le sous-menu inutilisable.

Répondre

1

Il y a probablement un problème avec le système de mise au point de WPF. WPF a son propre système de focus qui est complètement séparé de WinForms et des fenêtres Win32 standard.

Lors du changement de focus entre WinForms et WPF, je parie que certains événements ne se déclenchent pas correctement.

Une solution suggérée consiste à remplacer l'événement WndProc ou Click de la fenêtre WinForms et à définir manuellement IsOpen sur false dans votre popup.

Je m'attendrais à ce que ce soit la seule chose qui va le réparer.

Questions connexes