2009-08-17 8 views
17

Je crée un menu standard dans mon application WPF. Je sais que je peux créer des commandes personnalisées, mais je sais qu'il y a aussi un tas de commandes standard à lier.Commandes standard WPF - Où est la sortie?

Par exemple, pour ouvrir un fichier que je devrais lier à ApplicationCommands.Open, pour fermer un dossier que je dois lier à ApplicationCommands.Close. Il existe également un grand nombre de EditCommands, ComponentCommands ou NavigationCommands.

Il ne semble pas y avoir de commande "Quitter". Je m'attendrais à ce qu'il y ait ApplicationCommands.Exit. Que dois-je lier à l'élément de menu "Quitter"? Pour créer une commande personnalisée pour quelque chose, ce générique semble faux.

Répondre

4

AFAIK il n'y a pas ApplicationCommands.Quit ou ApplicationCommands.Exit, donc je suppose que vous allez devoir créer vous-même ...

Quoi qu'il en soit, si vous utilisez la MVVM pattern, RoutedCommands ne sont pas exactement à portée de main, il est donc préférable d'utiliser une alternative légère comme RelayCommand ou DelegateCommand.

0

Vous pouvez modifier la propriété Text d'une commande avant de la lier dans une fenêtre. Cela va changer le texte de la commande partout où il apparaît dans votre interface utilisateur.

EDIT: Faites ceci à Fermer dans la fenêtre ou App cteur

6

Pas si complexe en fait (mais quand même, M $ est nul pour ne pas le fournir). Ici, vous allez:

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

Et le corps du gestionnaire d'événements AplicationCloseCommand.CanExecuteChanged peut-être même pas besoin.

Vous pouvez l'utiliser comme ceci:

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

Cheers!

(Vous ne pouvez pas imaginer combien de temps il m'a fallu découvrir ce genre de choses de commande moi-même ...)

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

Il serait préférable si vous avez ajouté une explication à votre code ... – JTG

Questions connexes