J'écris une application (C# + wpf) dans laquelle toutes les boîtes de dialogue de style modal sont implémentées sous forme de UserControl
au-dessus d'une grille translucide couvrant le Window
principal. Cela signifie qu'il n'y a qu'un seul Window
et il maintient l'aspect et la convivialité de toutes les applications des entreprises.Emulation de la fonctionnalité ShowDialog
Pour afficher une MessageBox
, la syntaxe est la suivante:
CustomMessageBox b = new CustomMessageBox("hello world");
c.DialogClosed +=()=>
{
// the rest of the function
}
// this raises an event listened for by the main window view model,
// displaying the message box and greying out the rest of the program.
base.ShowMessageBox(b);
Comme vous pouvez le voir, non seulement le flux d'exécution en fait inversée, mais son horriblement bavard par rapport à la version .NET classique:
MessageBox.Show("hello world");
// the rest of the function
ce que je cherche vraiment est un moyen de ne pas revenir de base.ShowMessageBox
jusqu'à ce que le dialogue événement fermé a été soulevée par elle, mais je ne peux pas voir comment il est possible d'attendre cela sans accrocher le fil de l'interface graphique et donc nous empêcher de nous En cliquant sur OK. Je suis conscient que je peux prendre une fonction de délégué en tant que paramètre de la fonction ShowMessageBox
qui empêche l'inversion de l'exécution, mais provoque quand même une syntaxe/indentation folle.
Ai-je manqué quelque chose d'évident ou existe-t-il un moyen standard de le faire?
Le premier article lié montre un exemple parfait de la façon de procéder. – Guy