2010-06-15 4 views
1

Je suis nouveau sur WPF, il se peut que je manque quelque chose. J'ai une fonction simple dans ma classe MainWindow appelée StartService. Je voulais ajouter un élément de menu "Démarrer le service" avec un raccourci Ctrl + S à mon application. Je devais faire ce qui suit:Menus WPF avec raccourcis et RoutedCommand personnalisés

  1. Dans ma classe MainWindow je devais définir:

    public static RoutedCommand StartServiceRoutedCmd = new RoutedCommand();

  2. Dans mon code XAML i ajouté:

<MenuItem Header="_Start Service" InputGestureText="Ctrl+S" Click="OnStartService" /> 

<Window.CommandBindings> 
    <CommandBinding Command="{x:Static loc:MainWindow.StartServiceRoutedCmd}" 
        Executed="OnStartService" /> 
</Window.CommandBindings> 

<Window.InputBindings> 
    <KeyBinding Command="loc:MainWindow.StartServiceRoutedCmd" Gesture="CTRL+S" /> 
</Window.InputBindings> 

Les choses fonctionnent. Je me demande si c'est la bonne façon d'y aller? Je vais avoir besoin d'un raccourci pour ma fonction StopService. Cela signifie-t-il que je devrai définir un nouveau StopServiceRoutedCmd RoutedCommand, et ainsi de suite pour chaque raccourci dont j'ai besoin?

+0

Oui, vous auriez besoin d'une nouvelle RoutedCommand pour arrêter le service. Tout le reste semble bien. – Amsakanna

+0

J'ai effectivement réalisé que mon entrée d'élément de menu devrait ressembler à ceci: De cette façon, j'obtiens la validation partout si J'ajoute toujours un CanStartService(). Je suis content de savoir que je suis sur la bonne voie. :) – Tamer

+0

Je pense que vous utilisiez la méthode basée sur l'événement avant et pendant la transformation en commandes que vous avez oublié de changer :) Oui! vous devez utiliser une commande là-bas. Parfois, vous pouvez avoir du mal à passer des événements aux commandes. Pour cela, vous pouvez utiliser le comportement EventToCommand de MVVM Light Toolkit qui sera plus utile. http://www.galasoft.ch/mvvm/getstarted/ – Amsakanna

Répondre

2
<MenuItem Header="_Start Service" InputGestureText="Ctrl+S" Command="loc:MainWindow.StartServiceRoutedCmd /> 

<Window.CommandBindings> 
     <CommandBinding Command="{x:Static loc:MainWindow.StartServiceRoutedCmd}" 
       Executed="OnStartService" /> 
     </Window.CommandBindings> 

<Window.InputBindings> 
     <KeyBinding Command="loc:MainWindow.StartServiceRoutedCmd" Gesture="CTRL+S" /> 
</Window.InputBindings> 
Questions connexes