ShowDialog() derrière la fenêtre parent
Je suis en utilisant ShowDialog()
avec WindowStyle = WindowStyle.SingleBorderWindow;
pour ouvrir une fenêtre modale dans mon WPF MVVM () de l'application, mais ça me permet de naviguer jusqu'à la fenêtre parent à l'aide de la barre des tâches de Windows (Windows 7).
J'ai trouvé la réponse ici: WPF et ShowDialog() mais il n'est pas adapté pour moi parce que je n'ai pas besoin d'un "toujours au dessus" fenêtre de l'outil.
Merci d'avance
Vous devez vous connecter pour publier un commentaire.
Essayer de régler le
Owner
propriété de la boîte de dialogue. Cela devrait fonctionner.Edit:
J'ai eu un problème similaire en utilisant ce avec MVVM. Vous pouvez résoudre ce problème en utilisant des délégués.
App.Current.MainWindow
et cela fonctionne, mais pas la plus belle solution. Je devrais peut-être reconsidérer la structure de mon pattern MVVM.Application.Current.MainWindow
(Application à la place de l'App) et, depuis qu'il est statique - je suppose - il a bien fonctionné sans angoisser MVVM.J'ai eu ce problème, mais comme la Fenêtre était ouverte à partir d'un modèle de vue je n'ai pas la référence à la fenêtre en cours. Pour contourner cela, j'ai utilisé ce code:
Vous pouvez utiliser:
myWindow.Owner = Application.Current.MainWindow;
Cependant, cette méthode provoque des problèmes si vous avez trois fenêtres ouvertes comme ceci:
Alors la configuration de la ChildWindow2.Propriétaire = Application.Actuel.MainWindow va définir le propriétaire de la fenêtre pour être son grand-père de fenêtre, pas de fenêtre parent.
Lorsque la fenêtre parent fait (et le montre) la fenêtre enfant, qui est l'endroit où vous avez besoin de définir le propriétaire.
Aditionally, si vous ne voulez pas un supplément de barre des tâches pour tous les enfants... puis
this
n'est pas une Fenêtre? Je suis en cours d'exécution WPF de la sfm, et donc je n'ai aucune Application ou Fenêtre principale.Ajouter "ShowInTaskbar" et le mettre à false.
Même si ce post est un peu vieux, j'espère que c'est OK que je poste ma solution.
Tous les résultats ci-dessus sont connus pour moi et n'a pas exactement le rendement le résultat souhaité.
Je le fais pour les autres googlers 🙂
Permet de dire que f2 est votre fenêtre que vous souhaitez afficher sur le dessus de la f1 :
C'est ça , je vous promets qu'il ne va pas disparaître !
HTH
Guy
Une grande partie de la raison pour laquelle le modèle MVVM est pour que votre interaction logique peut être l'objet de tests unitaires. Pour cette raison, vous ne devriez jamais directement ouvrir une fenêtre à partir de ce Dernier, ou vous pourrez avoir des dialogues surgissent au milieu de vos tests unitaires.
Au lieu de cela, vous devez soulever un événement que la Vue de la poignée et d'ouvrir une boîte de dialogue pour vous. Voir, par exemple, cet article sur l'Interaction des Demandes: https://msdn.microsoft.com/en-us/library/gg405494(v=pandp.40).aspx#sec12