2010-06-08 5 views
3

Quelle est la meilleure façon de créer un menu avec des raccourcis clavier? Je veux simplement un menu Fichier comme Visual Studio qui a New, Open, Save, Save All, Exit, et quelques autres raccourcis standard.Manière correcte de créer un menu avec des raccourcis dans WPF

Il semble que InputGestureText affiche le texte approprié, mais comme il s'appelle "Text" et ne semble pas déclencher d'événements, je vais supposer que ce n'est pas la bonne façon de le faire. L'architecture de la commande semble également assez volumineuse, donc je ne veux pas aller dans cette direction s'il y a une meilleure façon de faire.

Mise à jour: Pour plus de clarté, disons que j'utilise le menu suivant:

<Menu> 
    <MenuItem Header="_File"> 
    <MenuItem Header="_New" /> 
    <MenuItem Header="_Open" /> 
    <Separator /> 
    <MenuItem Header="_Save" /> 
    <MenuItem Header="Save _All" /> 
    <Separator /> 
    <MenuItem Header="_Export"/> 
    <MenuItem Header="_Import"/> 
    <Separator /> 
    <MenuItem Header="E_xit"/> 
    </MenuItem> 
</Menu> 

où l'exportation et l'importation seraient raccourcis personnalisés; quelque chose que Microsoft n'a pas construit dans quelque chose comme ApplicationCommands. Pouvez-vous s'il vous plaît fournir une solution complète, y compris le code personnalisé C# si nécessaire? (Non seulement cela m'aidera, mais j'espère aider quelqu'un d'autre qui cherche des problèmes similaires.)

Répondre

13

Vous avez raison de noter que InputGestureText ne définit pas réellement un raccourci, il ne suffit étiquettes dans le menu. La façon correcte de le faire est d'utiliser les InputBindings de la fenêtre. Vous pouvez mapper un raccourci clavier à n'importe quelle commande, y compris vos propres commandes définies par le modèle. Mais pour que cela fonctionne, vous devez utiliser des éléments de menu liés aux commandes - ne pas gérer leurs événements de clic directement. C'est la manière recommandée de gérer les commandes de menu dans WPF. Sinon, vous devrez recourir à la gestion des événements du clavier à l'ancienne.

<Window.InputBindings> 
    <KeyBinding Key="A" Modifiers="Control" Command="{Binding MyAwesomeCommand}" /> 
</Window.InputBindings> 

More information sur MSDN.

+0

Hmm, c'est une nouvelle façon de brancher des raccourcis personnalisés aux commandes personnalisées. Cela ne me permet pas de démarrer complètement, mais le lien vers MSDN était extrêmement utile. –

+0

InputBinding permet à l'utilisateur d'appeler la commande via le raccourci clavier. Pour afficher un raccourci dans le menu, ajoutez simplement la propriété InputGestureText au menu approprié: '' – mrfelis

4

Jetez un oeil à la classe ApplicationCommands. Vous obtenez les gestes clés standard (accélérateurs) et du texte gratuitement.

<MenuItem Command="ApplicationCommands.Paste" Width="75" /> 
+0

Lorsque j'ajoute ceci à mon application, l'élément de menu est désactivé, même lorsque l'utilisateur est focalisé dans un TextBox et peut en fait copier-coller. Aussi, que faut-il faire pour une commande personnalisée? –

+0

@matt Droite .. Chaque commande est un combo Execute + CanExecute. L'élément de menu serait désactivé si CanExecute est évalué à false. c'est-à-dire si rien n'a encore été copié. PasteCmd.CanExecute retournerait false (en grisant l'élément de menu). Pour les commandes personnalisées - voir http://msdn.microsoft.com/fr-fr/library/system.windows.input.routedcommand.aspx – Gishu