158 votes

Comment gagnez-vous dialogue modale dans WPF ?

Je suis en train d'écrire ma première application en WPF et que vous voulez avoir à l'utilisateur de saisir des données sur une fenêtre de dialogue modale. Apparemment, ce n'est pas simple de le faire en WPF, parce que la fenêtre parent, il reste complètement activé, et la méthode qui a créé la nouvelle fenêtre enfant ne veut pas s'arrêter et d'attendre que l'enfant fenêtre pour appeler Close(). Au lieu de cela, il continue à aller de l'avant. Ce n'est pas ce que je veux.

Comment puis-je obtenir de l'enfant fenêtre pour l'ouvrir, et ont le parent de la fenêtre d'attente pour l'enfant de avant de fermer la fenêtre parent continue l'exécution?

255voto

Yordan Pavlov Points 2275

Avez-vous essayé de montrer votre fenêtre à l’aide de la méthode ShowDialog ?

N’oubliez pas de définir la propriété Owner sur la fenêtre de dialogue. Vous éviterez de comportement bizarre lorsque Alt + Tab, etc..

32voto

Dominic Hopton Points 6052

De la fenêtre.Afficher la Fenêtre affichera la fenêtre, et poursuivre l'exécution, c'est un appel non bloquant.

De la fenêtre.ShowDialog va bloquer le thread appelant (un peu [1]), et afficher la boîte de dialogue. Il permet également de bloquer l'interaction avec le parent/fenêtre propriétaire. Lorsque la boîte de dialogue fermée (forwhatever raison) ShowDialog sera de retour à l'appelant, et vous permettra d'accéder à DialogResult (si vous le voulez).

[1] Elle permet de conserver le répartiteur de pompage en poussant un répartiteur cadre sur le WPF dipatcher. Ce sera la cause de la pompe de message pour garder de pompage.

2voto

harms Points 6348

Étant donné une fenêtre objet myWindow, myWindow.Show() ouvrira il façon non modale et myWindow.ShowDialog() il ouvrira sous forme modale. Toutefois, même cette dernière ne bloque pas, de ce que je retiens.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X