Comment faire ChildWindow de blocage
ChildWindow est une fenêtre modale, mais il ne bloque pas. Est-il possible de faire ce blocage? En gros, je veux un ShowDialog() méthode qui vous permettra d'appeler ChildWindow.Show() mais pas de retour jusqu'à ce que l'utilisateur a fermé la ChildWindow. J'ai essayé d'utiliser le Moniteur.Enter() pour bloquer après ChildWindow.Show(), mais la ChildWindow jamais rendu et le navigateur juste accroché. Quelqu'un a des idées?
Pourriez-vous expliquer ce que vous souhaitez atteindre?
Juste un simple modal de blocage de fenêtre semblable à MessageBox.Show() ou la Forme.ShowDialog()
J'ai tout essayé et je n'ai jamais trouvé une solution. J'ai essayé de faire mon propre MessageBox. J'ai même essayé de async mais il est toujours enfermé. J'ai abandonné après la lecture que Tim Heuer disant que ce n'était pas possible d'avoir une vraie Modal.
Juste un simple modal de blocage de fenêtre semblable à MessageBox.Show() ou la Forme.ShowDialog()
J'ai tout essayé et je n'ai jamais trouvé une solution. J'ai essayé de faire mon propre MessageBox. J'ai même essayé de async mais il est toujours enfermé. J'ai abandonné après la lecture que Tim Heuer disant que ce n'était pas possible d'avoir une vraie Modal.
OriginalL'auteur Mike Hall | 2009-08-13
Vous devez vous connecter pour publier un commentaire.
Je ne crois pas qu'il soutient que le comportement. Vous pouvez voter pour elle sur CodePlex. Selon ce que vous voulez, vous pouvez soit regardez certains de Tim Heuer solutions de contournement ici, ou d'utiliser un autre contrôle personnalisé, comme le Silverlight commande Modale (sur CodePlex).
OriginalL'auteur Jon Galloway
Vous ne pouvez pas faire ce que vous essayez de le faire dans Silverlight. Toutes les modifications apportées à l'INTERFACE utilisateur sera exécuté sur le thread d'INTERFACE utilisateur. Si vous choisissez de bloquer le thread de l'INTERFACE utilisateur, l'utilisateur ne peut pas interagir avec le navigateur, donc il n'y a pas d'action qu'ils pourraient prendre pour débloquer le fil.
Si vous voulez vraiment créer une boîte de dialogue de blocage de la fenêtre, la seule façon de le faire est de partir d'un non-UI thread. E. g. vous pouvez créer une méthode qui ressemble à quelque chose comme:
Cette méthode affichera une boîte de dialogue de la fenêtre et de ne pas revenir jusqu'à ce que la fenêtre de dialogue est fermée. Mais cette méthode ne peut être appelée à partir d'un non-UI-fil. Appeler à partir de l'INTERFACE utilisateur-thread va provoquer un blocage (depuis l'UI thread est en attente d'un événement qui ne peut feu sur l'UI thread).
Alternativement, vous devriez envisager de faire votre logique asynchrone plutôt que de les forcer à être synchrone.
OriginalL'auteur KeithMahoney
Si vous voulez effectuer une action sur votre enfant de fermeture de fenêtre, utilisez le code suivant. Le masquage des contrôles avant de les invoquer et de spectacle à proximité de la fenêtre enfant, simple 🙂
OriginalL'auteur Ashin Antony
Vous pourriez essayer de toujours annuler la clôture de l'événement et de l'ensemble de la DialogResult plus tard.
OriginalL'auteur Paul van Dam
À l'aide de async et await dans Silverlight 5 vous pouvez facilement créer un statique Montrent méthode qui peut être bloquant, comme
et appelez la boîte de dialogue comme
Task<T>.Factory.StartNew()
n'est pas awaitable. Aussi, bien que cette réponse présente les async/await modèle dans le mélange, elle ne résout pas le problème fondamental que vous ne pouvez pas bloquer le thread de l'INTERFACE utilisateur, sans le figer le navigateur, de sorte que cette approche n'offre aucune valeur réelle et en plus de Keith Mahoney de la solution.Cet extrait est à partir de mon projet de travail. Je l'utilise comme une solution commune pour les dialogues. Pour le compiler, vous aurez besoin du "pack de ciblage asynchrone", vous pouvez les ajouter à votre projet à l'aide de la nuget. Veuillez lire l'article en utilisant le lien dans ma réponse.
OriginalL'auteur Alexander Zwitbaum
J'ai piraté loin à la création d'un "blocage" boîte de dialogue modale, en ayant un contrôle personnalisé qui a un vertical et horizontal alignement comme l'étirement, puis ajouter qu'en tant qu'enfant de la mise en page du contrôle actuel.
par exemple
et puis dans le contrôle personnalisé
En fonction de ce qui doit être affiché dans le modal, j'ai ajouter dynamiquement des contrôles à la modale de mise en page. Il n'est évidemment pas une solution élégante, mais au moins il fonctionne.
J'ai fait un blocage par la liaison d'un événement dans la boîte de message. Ainsi, il bloque le reste du programme jusqu'à ce que l'événement se déclenche
OriginalL'auteur Johannes