2010-10-05 1 views
7

Gibt es einen Befehl in WPF, um die Anwendung aus dem Kontextmenü zu schließen? Das heißt, das gleiche Kontextmenü, das Sie erhalten, wenn Sie mit der rechten Maustaste auf die Titelleiste eines Fensters klicken.Wie Sie WPF-Anwendung über das Kontextmenü schließen?

Es gibt viele Standardbefehle, aber ich habe Probleme, einen Ausgang Befehl zu finden.

Antwort

16

Leider existiert das nicht. Sie müssen einen benutzerdefinierten Befehl implementieren und

anrufen
Application.Current.Shutdown(); 
+3

Es ist wahrscheinlich Application.Current.Shutdown(); als Application.Current.Exit(); ist ein Ereignis. – Vitalij

+0

Das stimmt, danke. – Jeremy

1

Es gibt ein ApplicationCommands.Close, aber es gibt kein ApplicationCommands.Exit.

Siehe z. B. this thread, um Alternativen zu finden (z. B. Erstellen eines benutzerdefinierten Befehls).

1

Ihr Problem ist gelöst. Aber folgender Code kann anderen helfen.

 
    Environment.Exit(0) 
+0

Ich denke, die Application.Current.Shutdown sollte stattdessen verwendet werden. IIRC, Env.Exit ist eine ziemlich harte Aktion, vergleichbar mit dem direkten Töten des Prozesses. Aber ich kann mich eindeutig irren. Leider habe ich keinen Reflektor zur Hand, um es zu überprüfen. – quetzalcoatl

+0

Ja Environment.Exit (0) ist eine sehr brutale Methode zum Schließen Ihrer Anwendung. Es gibt alle Ressourcen Ihrer Anwendung frei und kehrt zur Betriebssystemumgebung zurück. – Towhid

0

nicht so komplex tatsächlich (aber immer noch, saugt M $ für sie nicht bereitstellt). Hier gehen Sie:

public static class MyCommands 
{ 
    private static readonly ICommand appCloseCmd = new ApplicationCloseCommand(); 
    public static ICommand ApplicationCloseCommand 
    { 
     get { return appCloseCmd; } 
    } 
} 

//=================================================================================================== 
public class ApplicationCloseCommand : ICommand 
{ 
    public event EventHandler CanExecuteChanged 
    { 
     // You may not need a body here at all... 
     add { CommandManager.RequerySuggested += value; } 
     remove { CommandManager.RequerySuggested -= value; } 
    } 

    public bool CanExecute(object parameter) 
    { 
     return Application.Current != null && Application.Current.MainWindow != null; 
    } 

    public void Execute(object parameter) 
    { 
     Application.Current.MainWindow.Close(); 
    } 
} 

Und der Körper der AplicationCloseCommand.CanExecuteChanged Event-Handler nicht sein kann sogar erforderlich.

Sie verwenden es, wie so:

<MenuItem Header="{DynamicResource MenuFileExit}" Command="MyNamespace:MyCommands.ApplicationCloseCommand"/> 

Prost!

(Sie können sich nicht vorstellen, wie es mir lange gedauert hat, diesen Befehl Sachen selbst zu entdecken ...)

+1

Little Trick ReSharper sagte mir: meine compete Körper der Klasse 'MyCommands': öffentliche statische ICommand ApplicationCloseCommand {get; } = new ApplicationCloseCommand(); ' –

+0

@OlleKelderman Ja. Dies ist C# Version 6 Syntax. Diese Antwort ist älter. :) – NoOne

+0

Ich weiß, immer noch nützlich für jeden hier von der Suchmaschine :) –