2009-08-17 7 views
17

Sto creando un menu standard nella mia applicazione WPF.Comandi standard WPF - Dov'è l'uscita?

So che posso creare comandi personalizzati, ma so che ci sono anche una serie di comandi standard a cui legarsi.

Ad esempio, per aprire un file dovrei legarsi al ApplicationCommands.Open, di chiudere un file dovrei legarsi al ApplicationCommands.Close. C'è anche un gran numero di EditCommands, ComponentCommands o NavigationCommands.

Non sembra essere un comando "Esci". Mi sarei aspettato che ci fossero ApplicationCommands.Exit.

Cosa devo associare alla voce di menu "Esci"? Per creare un comando personalizzato per qualcosa questo generico sembra sbagliato.

risposta

4

Per quanto ne sappia non c'è ApplicationCommands.Quit o ApplicationCommands.Exit, quindi credo che dovrai creare da soli ...

In ogni caso, se si sta utilizzando il MVVM pattern, RoutedCommands non sono esattamente a portata di mano, quindi è meglio utilizzare un'alternativa leggera come RelayCommand o DelegateCommand.

0

È possibile modificare la proprietà Text di un comando prima di collegarlo in una finestra. Questo cambierà il testo del comando ovunque appaia nel tuo ui.

EDIT: Fate questo per chiudere la finestra o App ctor

6

Non molto complesso in realtà (ma ancora, M $ fa schifo per non averlo fornito). Qui si va:

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(); 
    } 
} 

E il corpo del gestore AplicationCloseCommand.CanExecuteChanged evento non può essere nemmeno bisogno.

Si utilizza in questo modo:

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

Cheers!

(Non potete immaginare quanto tempo mi ha portato a scoprire questa roba comando io ...)

0
private void MenuItem_Click(object sender, RoutedEventArgs e) 
    { 
     Application.Current.Shutdown(); 
    } 
+0

Sarebbe preferibile se si aggiunge una spiegazione per il codice ... – JTG

Problemi correlati