Wie kann man die Schließen-Schaltfläche im WPF-Fenster ausblenden?
Schreibe ich ein modales Dialogfeld in WPF. Wie setze ich ein WPF-Fenster nicht schließen-button? Ich würde noch gerne für seine WindowState haben eine normale Titelleiste.
Fand ich ResizeMode, WindowState, und WindowStyle, aber keine dieser Eigenschaften lassen Sie mich ausblenden die Schaltfläche schließen, aber es zeigt in der Titelleiste, wie in modalen Dialogen.
Kommentar zu dem Problem - Öffnen
Hat Ihr modales Dialogfeld eine Schaltfläche Abbrechen? Wenn ja, könnten Sie behandeln, schlagen Sie die schließen-Schaltfläche das drücken von Abbrechen?
Es ist ein Fortschritt-Dialogfeld ausführen ein hintergrund-thread, der nicht Abbrechen; ich denke, ich versuche nur, es zu machen, so dass ich nicht haben, zu unterstützen, zu stornieren (noch nicht). Du hast wahrscheinlich Recht, obwohl.
Auch ich hasse apps zu entfernen versuchen-Fenster von chrome. Wenn ich ein Dialogfeld mit dem Fortschritt, ich mache immer die Fenster Schließen-Schaltfläche tun, die gleiche Logik, wie auf das eigentliche Schaltfläche Abbrechen.
Für Chris: Können sich vorstellen, Ihre software für die Videoüberwachung. Ein security-Agent in der Nacht HAT (das ist sein job) lassen Sie die Fenster geöffnet... aber manchmal Ihre Arbeit ist langweilig und Sie möchten, surfen Internet oder schließen Sie das Video-Matrizen windows aus irgendeinem Grund, entfernen Sie die windows-Tasten ist der richtige Weg, es zu tun.
@ChrisUpchurch, "Warum wollen Sie das tun? Es kommt mir wirklich miese UI-design. " - wirklich "miese UI-design" ist, wenn ein Programm zeigt ein Dialogfeld mit OK; Abbrechen und Enge - buttons. An einen Benutzer, kann es nicht offensichtlich sein, was Enge hat. Hat es Abbrechen oder submit? Konsens ist, nicht zu schließen-Schaltflächen in Dialogen es gibt also das
InformationsquelleAutor der Frage Michael Hedgpeth | 2009-04-13
Du musst angemeldet sein, um einen Kommentar abzugeben.
WPF nicht über eine integrierte Eigenschaft zum ausblenden der Titelleiste, Schließen-Schaltfläche, aber Sie können es tun, mit ein paar Zeilen von P/Invoke.
Ersten, fügen Sie diese Erklärungen auf Ihre Fenster-Klasse:
Dann diesen code in das Fenster Geladen-Ereignis:
Ist und man nicht mehr Schließen-Schaltfläche. Sie wird auch nicht haben, ein Fenster-Symbol auf der linken Seite der Titelleiste, was bedeutet, dass keine System-Menü, auch wenn Sie mit der rechten Maustaste auf die Titelleiste -- gehen Sie alle zusammen.
Beachten Sie, dass Alt+F4 immer noch das Fenster zu schließen. Wenn Sie nicht zulassen möchten, dass das Fenster zu schließen, bevor der hintergrund-thread geschehen, dann könnte man auch überschreiben von OnClosing und setzen Sie Cancel auf true, wie Frank vorgeschlagen.
InformationsquelleAutor der Antwort Joe White
Ich habe gerade ähnliche problem und Joe White ' s Lösung scheint mir, einfach und sauber. Ich wiederverwendet und definiert es als eine angefügte Eigenschaft der Fenster
Dann in XAML, die Sie nur es so einstellen:
InformationsquelleAutor der Antwort SpudCZ
Set
WindowStyle
- Eigenschaft auf None, die verstecken wird die control-box, zusammen mit der Titelleiste. Keine Notwendigkeit, kernal-aufrufen.InformationsquelleAutor der Antwort Sriwantha Attanayake
Diese nicht loszuwerden, die schließen-Schaltfläche, aber es wird halt jemand das Fenster schließen.
Setzen Sie diese in Ihre code-behind-Datei:
InformationsquelleAutor der Antwort flurbius
Deaktivieren der Schaltfläche schließen, sollten Sie fügen Sie den folgenden code, um Ihre Fenster-Klasse (der code stammt aus hier, bearbeitet und neu formatiert ein bisschen):
Dieser code auch deaktiviert Element schließen im Menü "System", und lässt den dialog schließen mit Alt+F4.
Werden Sie wahrscheinlich wollen, um das Fenster zu schließen programmgesteuert. Einfach anrufen
Close()
wird nicht funktionieren. Etwas wie das hier tun:InformationsquelleAutor der Antwort Viachaslau Tysianchuk
Ich versuche Viachaslau Antwort, da ich die Idee nicht entfernen Taste, aber Sie, es zu deaktivieren, aber für einige Grund es hat nicht immer funktioniert: den schließen-button war immer noch aktiviert, aber keine Fehler löschen.
Diese auf der anderen Seite immer geklappt (error checking weggelassen):
InformationsquelleAutor der Antwort stijn
Ich nur hinzufügen, dass meine Umsetzung der Joe White ' s Antwort mit Interaktivität Verhalten (Sie müssen Referenz-System.Windows.Interaktivität).
code:
Verwendung:
InformationsquelleAutor der Antwort tom.maruska
Den die Eigenschaft gesetzt ist =>
WindowStyle="None"
InformationsquelleAutor der Antwort daniele3004
So, ziemlich viel, hier ist dein problem. Die Schaltfläche schließen in der oberen rechten Ecke eines Fenster-Rahmen ist nicht Teil des WPF-Fensters, aber es gehört zu dem Teil des Fensters, der Rahmen, der ist gesteuert von Ihrem OS. Das heißt, Sie müssen Win32 interop, es zu tun.
alternativ können Sie verwenden Sie den noframe und geben Sie entweder Ihren eigenen "Rahmen" haben oder kein Rahmen.
InformationsquelleAutor der Antwort Muad'Dib
Folgende ist zum deaktivieren des schließen und Maximieren/Minimieren-Schaltflächen, tut es nicht tatsächlich entfernen Sie die Tasten (aber es funktioniert, entfernen Sie die Menü-Elemente!). Die Schaltflächen in der Titelleiste gezogenen deaktiviert/ausgegraut Zustand. (Ich bin nicht ganz bereit, um Sie über alle Funktionen, die mir selbst ^^)
Dies ist etwas anders als Virgoss Lösung, die Sie entfernt das Menü (und die nachgestellte Trennzeichen, falls erforderlich), anstatt nur Sie zu deaktivieren. Es unterscheidet sich von Joe Whites Lösung, da es nicht deaktiviert das gesamte system-Menü und so, in meinem Fall kann ich halten um die Minimieren-Schaltfläche und Symbol.
Den Folgen code auch unterstützt, deaktivieren Sie die Minimieren/Maximieren buttons, im Gegensatz zu den Schließen-button, entfernen Sie die Einträge aus dem Menü nicht bewirken, dass das system zum Rendern des buttons "deaktiviert", obwohl das entfernen der Menü-Einträge hat deaktivieren Sie die Funktionalität der Tasten.
Es funktioniert für mich. YMMV.
Verwendung: Dieses muss durchgeführt werden, NACHDEM die Quelle initialisiert wird. Ein guter Platz ist die Verwendung der SourceInitialized-Ereignis des Fensters:
Deaktivieren Sie die Tastenkombination Alt+F4 Funktionalität die einfache Methode ist, einfach zu Draht, Abbruch-Ereignis und verwenden, setzen Sie ein flag, wenn Sie wirklich wollen, um das Fenster zu schließen.
InformationsquelleAutor der Antwort
XAML-Code
funktionieren sollte
Bearbeiten- für Ihre sofort dies Thread zeigt, wie dies getan werden kann, aber ich glaube nicht, dass Window eine Eigenschaft zu bekommen, was Sie wollen, ohne dabei die normale Titelleiste.
Edit 2
Diese Thread zeigt einen Weg, es zu tun, aber Sie müssen Ihren eigenen Stil, um das system-Menü und es zeigt einen Weg, wie man das machen kann.
InformationsquelleAutor der Antwort TStamper
Damit der Benutzer "close" das Fenster aber wirklich nur verstecken.
In der Fenster OnClosing Ereignis, das Fenster ausblenden, wenn bereits sichtbar:
Jedes mal, wenn der Hintergrund-thread ausgeführt werden, re-show, hintergrund-UI-Fenster:
Beim beenden der Ausführung des Programms, stellen Sie sicher, dass alle windows sind/können-geschlossen werden:
InformationsquelleAutor der Antwort BSalita
goto-Fenster Eigenschaften legen Sie
u wont get close buttons...
InformationsquelleAutor der Antwort Pavan R Bhupalam
Versuchen Sie, ein Closing-Ereignis aus dem Fenster. Fügen Sie diesen code an den Ereignishandler.
Dies wird verhindern, dass das Fenster schließen. Dies hat den gleichen Effekt, wie versteckt die Schaltfläche "schließen".
InformationsquelleAutor der Antwort Dennis R
Verwenden Sie diese, modifiziert von https://stephenhaunts.com/2014/09/25/remove-the-close-button-from-a-wpf-window :
InformationsquelleAutor der Antwort vapcguy
Nach viel suchen nach der Antwort auf diese, habe ich diese einfache Lösung, die ich hier in der Hoffnung, es hilft anderen.
Ich
WindowStyle=0x10000000
.Dieser legt die
WS_VISIBLE (0x10000000)
undWS_OVERLAPPED (0x0)
Werte für den Fenster-Stil. "Überlappt" wird der erforderliche Wert zum anzeigen der Titelleiste und der Fensterrahmen. Durch das entfernen derWS_MINIMIZEBOX (0x20000)
,WS_MAXIMIZEBOX (0x10000)
, undWS_SYSMENU (0x80000)
Werte aus meinem Stil Wert, Sie alle Knöpfe in der Titelleiste, die entfernt wurden, inklusive der Schließen-Schaltfläche.InformationsquelleAutor der Antwort Joe Horr
Wie bereits in anderen Antworten, die Sie verwenden können
WindowStyle="None"
entfernen der Titelleiste zusammen.Und, wie bereits in den Kommentaren zu den anderen Antworten, dies verhindert, dass das Fenster aus ziehbar, so ist es schwer zu bewegen, es aus seiner ursprünglichen position.
Jedoch, Sie zu überwinden können Sie es durch hinzufügen einer Zeile code in den Konstruktor der Fenster des Code-Behind-Datei:
Oder wenn Sie es bevorzugen Lambda-Syntax:
Das macht das ganze Fenster gezogen werden. Interaktive Steuerelemente im Schaufenster präsentieren, wie Buttons, wird immer noch als normal und nicht handeln wie drag-Griffe für die Fenster.
InformationsquelleAutor der Antwort Holf
Wenn das Bedürfnis erst zu verbieten, die der Benutzer beim schließen des Fensters, ist dies eine einfache Lösung.
XAML-code:
IsCloseButtonEnabled="False"
InformationsquelleAutor der Antwort Filipe Piletti Plucenio
Verwenden
WindowStyle="SingleBorderWindow"
dieses verstecken, max-und min-Taste aus WPF-Fenster.InformationsquelleAutor der Antwort Vishal Nayan