comment mettre en wpf MessageBox.Propriétaire de fenêtre de bureau, parce que le SplashScreen ferme MessageBox
Je suis en utilisant le SplashScreen fonctionnalité dans WPF par la définition d'une image Action de Construire pour le Splashscreen. Derrière l'écran de démarrage, les informations de licence est en cours de vérification, et si elle échoue, je montre un MessageBox.
Selon cette Commentaires, c'est parce que la MessageBox.Le propriétaire est l'écran de démarrage et dès qu'une fenêtre est ouverte, même si c'est un MessageBox l'écran de démarrage la fenêtre est fermée, puis la fermeture de la MessageBox, de sorte que l'utilisateur ne voit jamais la MessageBox.
Donc, la solution consisterait à définir la MessageBox.Propriétaire à l'autre fenêtre, mais cela voudrait dire que je dois instancier une autre fenêtre qui pourraient même ne pas être nécessaire.
Serait-il possible de définir la MessageBox.Propriétaire à la fenêtre du bureau? Et comment, parce que la seule autre fonction qui vient à l'esprit est le GetDesktopWindow() la fonction de l'api, mais qui renvoie un handle de fenêtre et MessageBox.Le propriétaire est une Fenêtre WPF.
OriginalL'auteur adriaanp | 2009-02-23
Vous devez vous connecter pour publier un commentaire.
Depuis l'utilisation de la fenêtre du bureau en tant que parent pour vos boîtes de dialogue modales n'est pas une bonne idée, comme @Nir a souligné, dans sa réponse, voici trois autres solutions de contournement:
1) Utiliser une fenêtre masquée. Créer un petit, non-fenêtre modale pour agir en tant que parent pour votre MessageBox ou une autre boîte de dialogue modale. Cette approche est décrite ici:
http://social.msdn.microsoft.com/Forums/en-US/wpf/thread/116bcd83-93bf-42f3-9bfe-da9e7de37546/
2) Créer des non-modale message de windows. Changer votre mode de démarrage explicite de l'arrêt et de l'utilisation d'un non-modale de la fenêtre pour afficher votre message. Cette approche est décrite dans la réponse à cette StackOverflow question:
MessageBox avec les détails de l'exception disparaît immédiatement si l'utilisation de l'écran de démarrage en WPF 4.0
3) MessageBox deux fois. Apparemment, le problème n'affecte que la première boîte de dialogue modale montré. Donc, il vous suffit d'appeler votre boîte de dialogue modale à deux fois, si vous n'avez pas l'esprit de la flash de la première ouverture et de fermeture.
https://connect.microsoft.com/VisualStudio/feedback/details/600197/wpf-splash-screen-dismisses-dialog-box
Personnellement, je n'aime aucun de ces solutions de contournement. La seule autre option est d'éviter de l'intégré dans le SplashScreen de la fonctionnalité et de rouler votre propre à partir de zéro. Voici un lien si vous voulez enquêter sur la route plus loin:
http://social.msdn.microsoft.com/Forums/en-US/wpf/thread/8dd49fd0-9cc9-43c6-b285-6f119ab8a32e/
Enfin, si vous êtes gêné par ce problème, comme je le suis, vous pouvez voter pour Microsoft pour résoudre ce bug ici:
http://connect.microsoft.com/VisualStudio/feedback/details/600197/wpf-splash-screen-dismisses-dialog-box
OriginalL'auteur dthrasher
Je suis venu avec cette solution moi-même, alors peut-être il ya quelque chose de mal avec elle, mais il semble fonctionner parfaitement:
Visibility=Visibility.Hidden
n'est pas vraiment nécessaire, comme vous allez afficher la fenêtre de toute façon. Au lieu de cela, afin d'éviter le démarrage de l'affichage de la fenêtre d'arrière-plan, j'ai utilisé:new Window { WindowState = WindowState.Minimized, ShowInTaskbar = false }
new Window { AllowsTransparency = true,ShowInTaskbar=false,WindowStyle=WindowStyle.None, Background=Brushes.Transparent}
peut rendre la fenêtre complètement caché pendant le réglage de la visibilité ou de la fenêtre d'état entraînera la fenêtre pour être montré pour quelques millisec quandShow()
est invoquer.OriginalL'auteur Alain
J'ai trouvé le problème. Je suis également à l'aide de l'écran de démarrage, ce qui provoque cette: WPF SplashScreen ferme MessageBox
OriginalL'auteur adriaanp
Pouvez-vous mettre un peu de code? J'ai juste essayé d'ajouter ce point à l'Application.xaml.cs fichier dans une nouvelle application WPF:
... et il fonctionne comme prévu (la "confirmation de Démarrer l'invite" reste ouverte jusqu'à ce que j'ai répondu, et si je clique sur "Non" l'application s'arrête).
Donc je suppose que maintenant vous avez besoin pour décider de fermer la question "N'est plus pertinent" ou (comme @adriaanp suggère dans son commentaire), le retravailler comme une question différente.
OriginalL'auteur Matt Hamilton
La fenêtre du bureau n'est jamais le bon parent, lisez ceci pour savoir pourquoi:
http://blogs.msdn.com/oldnewthing/archive/2004/02/24/79212.aspx
Maintenant, le problème décrit dans ce post n'arrive pas tellement à cause de MS travaillé autour d'elle, dans ce post, vous pouvez voir comment:
http://blogs.msdn.com/oldnewthing/archive/2006/11/02/931674.aspx
OriginalL'auteur Nir
cela m'a beaucoup aidé .....
De me donner une nouvelle idée
mais l'exemple de code que j'ai vu ici a quelques modification
voici un exemple simple en wpf avec modification
maintenant, il est de travail
sur le bouton cliquez sur
coller ce code
si (Système d'.De Windows.Les formulaires.MessageBox.Afficher("u sont sûr", "supprimer", Système.De Windows.Les formulaires.MessageBoxButtons.Ouinon, Système.De Windows.Les formulaires.MessageBoxIcon.Question) == Système.De Windows.Les formulaires.DialogResult.Oui)
{
c'.Close();
}
d'autre
{
MessageBox.Afficher("pourquoi ne pas supprimer");
}
OriginalL'auteur
Ce n'est pas directement liée à l'OP de la situation, mais peut être utile pour d'autres personnes qui ont des problèmes avec MessageBox être caché derrière d'autres fenêtres dans certaines situations particulières.
@Dthrasher mentionne, une solution consiste à utiliser un caché factice de la fenêtre. Mais parfois, même cela ne suffit pas. J'ai eu une situation où la solution n'était pas seulement d'utiliser un caché mannequin fenêtre, mais à son Supérieur de la propriété chaque fois que je l'ai utilisé avec MessageBox.
OriginalL'auteur RenniePet