Comment masquer le bouton fermer dans la fenêtre WPF?
Je suis en train d'écrire une boîte de dialogue modale dans WPF. Comment faire pour définir une fenêtre WPF pour ne pas avoir un bouton de fermeture? Je voudrais encore pour son WindowState à la normale de la barre de titre.
J'ai trouvé ResizeMode, WindowState, et WindowStyle, mais aucune de ces propriétés permettent de me cacher le bouton fermer, mais de montrer la barre de titre, comme dans les boîtes de dialogue modales.
- Est-ce que votre boîte de dialogue modale avoir un bouton annuler? Si oui, pourriez-vous traiter de frapper le bouton fermer de la même fonction que la touche Annuler?
- C'est un dialogue de progression pour un arrière-plan travailleur. Je commence à penser que non, y compris un titre de la fenêtre serait probablement la meilleure.
- C'est un dialogue de progression de l'exécution d'un thread d'arrière-plan qui ne prend pas en charge l'annulation; je suppose que je suis juste en train de le faire donc je n'ai pas à l'appui de l'annulation (encore). Vous avez probablement raison, cependant.
- Je déteste aussi les applications d'essayer de supprimer de la fenêtre de chrome. Si je fais une boîte de dialogue de progression, je fais toujours le bouton de fermeture de fenêtre faire la même logique qu'en cliquant sur le réel bouton Annuler.
- Pour Chris: Permet d'imaginer votre logiciel est pour de la Vidéo Surveillance. Un Agent de sécurité pendant la nuit (c'est son boulot) pour garder les fenêtres ouvertes... mais parfois, leur travail est ennuyeux et qu'ils veulent surfer sur Internet ou à proximité de la Vidéo Matrices de windows pour une raison quelconque, en supprimant les boutons windows est la bonne façon de le faire.
- "Pourquoi voulez-vous faire cela? Il me semble vraiment moche conception de l'INTERFACE utilisateur. "- vraiment "moche conception de l'INTERFACE utilisateur", c'est quand un programme affiche une boîte de dialogue avec OK; Annuler et Fermer boutons. Pour un utilisateur, il peut ne pas être évident qu' Fermer ne. Est-il annuler ou de les soumettre? le Consensus n'est pas à inclure les boutons de fermeture dans les boîtes de dialogue il y a donc une
- Mais cacher le bouton de fermeture n'a pas empêcher que cela se produise, il ne imbéciles l'ignorants et paresseux(et à Google). Cacher le bouton de fermeture n'empêche qu'en cliquant sur ce bouton. Touche windows et la touche alt combos fonctionnent encore comme normale La "bonne" façon de faire, c'est de faire un compte d'utilisateur pour les travailleurs, avec une stratégie de groupe qui les empêche d'ouverture/de l'installation de tout logiciel autre que ce qui est approuvé.Ensuite, avoir un compte admin, que les autorités de contrôle ont accès, pour gérer la maintenance.
Vous devez vous connecter pour publier un commentaire.
WPF n'est pas intégré dans la propriété de masquer la barre de titre du bouton Fermer, mais vous pouvez le faire avec quelques lignes de P/Invoke.
Tout d'abord, ajoutez ces déclarations à la Fenêtre de votre classe:
Ensuite, mettez ce code dans la Fenêtre de l'événement Chargé:
Et là vous allez: plus de bouton Fermer. En outre, vous ne avez pas une icône de la fenêtre sur le côté gauche de la barre de titre, ce qui signifie pas de menu Système, même lorsque vous cliquez-droit sur la barre de titre -- ils vont tous ensemble.
Noter que Alt+F4 sera toujours fermer la Fenêtre. Si vous ne souhaitez pas autoriser la fermeture de la fenêtre avant que le thread d'arrière-plan est fait, alors vous pouvez aussi remplacer OnClosing et définir Annuler pour de vrai, comme Gabe suggéré.
SetWindowLongPtr
à la place.this.Loaded += new RoutedEventHandler(Window_Loaded)
ligne dans le code qui s'exécute onload, donc il sera ramasser de l'événement, etWindow_Loaded
doit être instatiated commeprivate void Window_Loaded(object sender, RoutedEventArgs e) { ... }
. Pas tout le monde sait ces choses.Je viens de problème similaire et Joe White solution me semble simple et propre. J'ai réutilisé elle et l'a défini comme une propriété attachée de Fenêtre
Puis en XAML vous suffit de le définir comme ceci:
Ensemble
WindowStyle
propriété d'une option qui permet de masquer la boîte de contrôle avec la barre de titre. Pas besoin de kernel appels.this.DragMove();
de la fenêtreMouseDown
événementCela ne peut pas se débarrasser du bouton fermer, mais il va empêcher quelqu'un de fermer la fenêtre.
Mettre ceci dans votre fichier code-behind:
Window
est défini comme une boîte de dialogue modale d'interférer avec l'Window
l'établissement de sesDialogResult
bien et peut le rendre inutilisable. stackoverflow.com/questions/898708/cant-set-dialogresult-in-wpfPour désactiver le bouton de fermeture, vous devez ajouter le code suivant à la Fenêtre de votre classe (le code a été prise à partir de ici, révisé et restructuré un peu):
Ce code désactive également à proximité de l'élément dans le menu Système et empêche la fermeture de la boîte de dialogue à l'aide de Alt+F4.
Vous aurez probablement envie de fermer la fenêtre par programmation. Juste appeler
Close()
ne fonctionnera pas. Faire quelque chose comme ceci:J'essayais Viachaslau de répondre parce que j'aime l'idée de ne pas supprimer le bouton, mais le désactiver, mais pour quelque raison il ne fonctionne pas toujours: le bouton de fermeture a été encore activée, mais pas d'erreurs que ce soit.
Ce, d'autre part toujours travaillé (vérification des erreurs omis):
Window
méthode d'extension dans mon projet.La propriété à définir est =>
WindowStyle="None"
Je viens de l'ajouter à ma mise en œuvre de Joe White répondre en utilisant l'Interactivité Comportement (vous avez besoin de Système de référence.De Windows.L'interactivité).
code:
utilisation:
Permettre à l'utilisateur de "fermer" de la fenêtre, mais vraiment que de les masquer.
Dans la fenêtre du OnClosing cas, masquer la fenêtre si déjà visibles:
Chaque fois que le thread d'arrière-plan doit être exécutée, re-show d'arrière-plan de l'INTERFACE utilisateur de la fenêtre:
Lors de la résiliation de l'exécution du programme, assurez-vous que toutes les fenêtres sont/peut-être fermé:
Donc, à peu près ici est votre problème. Le bouton fermer dans le coin supérieur droit d'un châssis de fenêtre n'est pas une partie de la fenêtre WPF, mais il appartient à la partie de l'encadrement de la fenêtre qui est contrôlée par votre système d'exploitation. Cela signifie que vous devrez utiliser Win32 interop à le faire.
alternativly, vous pouvez utiliser le noframe et fournir votre propre "cadre" ou n'ont pas de cadre.
La suite est sur la désactivation de la fermer et de Maximiser/Minimiser les boutons, il ne pas fait enlever les boutons (mais ce n'est supprimer les éléments de menu!). Les boutons sur la barre de titre sont tirés dans une désactivé/gris de l'état. (Je ne suis pas tout à fait prêt à prendre plus de toutes les fonctionnalités de moi-même ^^)
C'est un peu différent que Virgoss solution dans la mesure où il supprime les éléments de menu (et le séparateur à droite, si nécessaire) au lieu de simplement les désactiver. Il diffère de Joe Blancs solution car elle ne permet pas de désactiver l'ensemble du système de menu et donc, dans mon cas, je peux garder autour du bouton de réduction et de l'icône.
Le code ci-dessous prend également en charge la désactivation de l'Maximiser/Minimiser les boutons, à la différence du bouton Fermer, en supprimant les entrées du menu ne cause pas le système pour rendre les boutons "désactivé", même si en supprimant les entrées de menu ne désactiver la fonctionnalité des boutons.
Cela fonctionne pour moi. YMMV.
D'utilisation: il doit être fait APRÈS que la source est initialisé. Un bon lieu d'utiliser la SourceInitialized cas de la Fenêtre:
Pour désactiver les touches Alt+F4 fonctionnalités de la méthode facile, c'est juste pour le fil jusqu'à l'Annulation de l'événement et de l'utilisation de définir un indicateur pour quand vous avez vraiment envie de fermer la fenêtre.
Code XAML
devrait fonctionner
Modifier- pour votre instant cette Fil montre comment cela peut être fait, mais je ne pense pas que la Fenêtre a une propriété afin d'obtenir ce que vous voulez sans perdre la normale de la barre de titre.
Edit 2
Cette Fil montre une façon pour elle de le faire, mais vous devez appliquer votre propre style dans le menu système et il montre une façon comment vous pouvez le faire.
goto fenêtre propriétés de
u ne pourra pas se fermer les boutons...
WindowStyle = "None"
- regardez votre syntaxe. Pour un autre, c'est un fusil de chasse qui supprime la barre de titre, faire la boîte moche et manque un titre, quand il y a beaucoup beaucoup de meilleures façons de gérer cela (comme en témoignent les autres réponses), et est une double réponse.Essayez d'ajouter un événement de Clôture de la fenêtre. Ajoutez le code suivant au gestionnaire d'événements.
Cela permettra d'éviter la fenêtre de se fermer. Cela a le même effet que de cacher le bouton fermer.
L'utiliser, modifié à partir de https://stephenhaunts.com/2014/09/25/remove-the-close-button-from-a-wpf-window :
Après beaucoup de recherches pour la réponse, j'ai travaillé sur cette solution simple que je vais partager ici dans l'espoir qu'il aide les autres.
J'ai mis
WindowStyle=0x10000000
.Cela définit le
WS_VISIBLE (0x10000000)
etWS_OVERLAPPED (0x0)
valeurs de Style de Fenêtre. "Chevauché" est la valeur nécessaire pour montrer la barre de titre et la bordure de fenêtre. En supprimant laWS_MINIMIZEBOX (0x20000)
,WS_MAXIMIZEBOX (0x10000)
, etWS_SYSMENU (0x80000)
valeurs de mon style valeur, tous les boutons de la barre de titre ont été supprimés, y compris le bouton Fermer.Cela ne cache pas le bouton, mais empêchera l'utilisateur d'aller de l'avant en fermant la fenêtre.
Comme indiqué dans d'autres réponses, vous pouvez utiliser
WindowStyle="None"
pour supprimer la Barre de Titre tout à fait.Et, comme indiqué dans les commentaires à ceux d'autres réponses, cela empêche la fenêtre de déplaçable, il est difficile de le déplacer de sa position initiale.
Cependant, vous pouvez surmonter ce problème en ajoutant une seule ligne de code dans le Constructeur de la Fenêtre du fichier Code-Behind:
Ou, si vous préférez Lambda Syntaxe:
Cela rend l'ensemble de la Fenêtre déplaçable. Tous les contrôles interactifs présents dans la Fenêtre, tels que des Boutons, continuera de fonctionner normalement et de ne pas agir comme faites glisser les poignées pour la Fenêtre.
Utilisation
WindowStyle="SingleBorderWindow"
, cela permet de masquer max et min bouton de Fenêtre WPF.close
boutonSi le besoin n'est d'interdire à l'utilisateur de fermer la fenêtre, c'est une solution simple.
Code XAML:
IsCloseButtonEnabled="False"