2010-09-30 9 views
1

Je travaille sur une application WPF avec un bouton déroulant. Lorsqu'il est "développé", il affiche un UserControl personnalisé dans un ContextMenu. Ce contrôle comprend deux boutons, un pour Open et un pour Save. L'idée est que chacun de ces boutons affiche la boîte de dialogue appropriée.Comment conserver un ContextMenu visible derrière une boîte de dialogue modale

Mon problème est que, lorsque la boîte de dialogue est affichée, le ContextMenu (et donc le contrôle) se ferme. Je voudrais le garder visible pendant que la boîte de dialogue est ouverte. En même temps, j'aimerais que le dialogue reste en face/au-dessus.

Donc, ma question est, cela peut-il être fait du tout dans WPF? Je soupçonne que cela a à voir avec la façon dont la fenêtre parent gère l'événement LostFocus, mais je ne suis pas sûr.

+1

Je ne sais pas pourquoi vous utilisez un ContextMenu ici. Un menu (dans la plupart des applications) est destiné à permettre à un utilisateur de sélectionner une action (Ouvrir, Enregistrer), puis disparaître. Si vous voulez vraiment que le bouton reste "étendu", un contrôle Popup serait peut-être mieux adapté à vos besoins. –

+0

Merci, je vais regarder dans cela. Il se peut qu'il y ait une manipulation spéciale avec ContextMenus (qui sont affichés à l'intérieur des Popups) par opposition aux Popups en soi. –

Répondre

1

Eh bien, après avoir travaillé directement avec la classe Popup dans une application prototype rapide, je ne pouvais pas trouver un moyen d'obtenir le comportement que je voulais. Soit le popup disparaît lorsque le dialogue modal est affiché (StaysOpen == false), soit il reste visible en haut du dialogue (StaysOpen == true).

Cependant, j'ai trouvé une solution de rechange qui s'apparente au comportement que je voulais: il suffit d'ouvrir à nouveau le popup (IsOpen = true) après la fermeture du dialogue.

0
+0

Selon la documentation, définir StaysOpen sur true signifie que "le menu doit rester ouvert jusqu'à ce que la propriété IsOpen devienne false". Lorsque ContextMenu perd le focus, sa propriété IsOpen devient false. Pourtant, j'avais négligé la propriété StaysOpen, alors merci de le signaler. –

+0

On dirait que la propriété n'a aucun effet, voir http://social.msdn.microsoft.com/forums/en-US/wpf/thread/3ce930bd-fc4e-493b-b5ff-2ebf16882e7a. Il vaut mieux utiliser autre chose qu'un ContextMenu pour en contrôler la visibilité. –