La façon dont j'ai créé KeyBinding
était quelque chose comme :
<KeyBinding Modifiers="Ctrl" Key="S" Command="{Binding SaveCommand}" />
Mais que faire si j'avais besoin de deux touches de modification ? Par exemple, Ctrl + Shift .
La façon dont j'ai créé KeyBinding
était quelque chose comme :
<KeyBinding Modifiers="Ctrl" Key="S" Command="{Binding SaveCommand}" />
Mais que faire si j'avais besoin de deux touches de modification ? Par exemple, Ctrl + Shift .
La documentation indique que vous pouvez simplement séparer les modificateurs avec le caractère +
caractère :
<KeyBinding Modifiers="Ctrl+Shift" Key="S" Command="{Binding SaveCommand}" />
Ver aquí pour les détails sanglants, avec les éléments pertinents extraits ci-dessous au cas où le lien disparaîtrait :
XAML
<object property="oneOrMoreModifierKeys"/>
Valeurs XAML
oneOrMoreModifierKeys
- Une ou plusieurs touches de modification, définies par l'option ModifierKeys
délimité par un +
caractère.
Vous pouvez également utiliser un geste seul plutôt qu'un combo touche/modificateur :
<KeyBinding Gesture="Ctrl+Shift+S" Command="{Binding SaveCommand}" />
selon le même lien de documentation :
Lorsque vous définissez un KeyBinding dans XAML, il existe deux façons de spécifier la KeyGesture.
La première façon d'établir un KeyBinding dans XAML est de définir l'attribut Gesture de l'élément KeyBinding, qui permet de spécifier les touches et les modificateurs sous forme de chaîne unique, par exemple "CTRL+P".
La deuxième méthode consiste à définir l'attribut Key et les attributs Modifiers de l'élément KeyBinding.
Les deux façons de définir la KeyGesture sont équivalentes et modifient le même objet sous-jacent, mais il y aura un conflit si les deux sont utilisées. Dans le cas où les attributs Key, Modifiers et Gesture sont tous définis, l'attribut défini en dernier sera utilisé pour la KeyGesture.
Microsoft Docs : Syntaxe XAML en détail - Valeurs des attributs d'énumération : " KeyBinding.Modifiers ... cette propriété est un cas particulier, car l'énumération ModifierKeys prend en charge son propre convertisseur de type. Le convertisseur de type pour les modificateurs utilise un signe plus (+) comme délimiteur plutôt qu'une virgule (,). Cette conversion prend en charge la syntaxe plus traditionnelle pour représenter les combinaisons de touches dans la programmation Microsoft Windows, comme "Ctrl+Alt"." .
<KeyBinding Command="{Binding SaveCommand}"
Gesture="Ctrl+Shift+S" />
Voir la documentation MSDN, Classe KeyBinding .
Voici mon code pour mettre en œuvre des touches de raccourci à caractères multiples, telles que Alt + P + A dans WPF MVVM.
Ajoutez ceci à votre XAML (comportement joint pour l'événement KeyDown) :
cb:ShortCutBehavior.Command="{Binding Shortcuts.CmdKeyPressed}"
Ajoutez ceci à votre modèle de vue :
ShortCuts Shortcuts = new ShortCuts( this );
//Add Plenty of shortcuts here until your heart is desired
Shortcuts.AddDoubleLetterShortCut( AddOrganization, Key.P, Key.A, ModifierKeys.Alt, true);
Shortcuts.AddSingleLetterShortCut( CmdAddNewAgreement, Key.A, ModifierKeys.Alt);
Ce sont deux exemples d'ajout de raccourcis. Le premier est un raccourci à deux lettres : Alt + P + A qui exécute la méthode AddOrganization() et le second est un raccourci d'une seule lettre : Alt + A qui exécute l'ICommand CmdAddNewAgreemnt.
AddDoubleLetterShortCut et AddSingleLetterShortCut sont surchargés pour accepter des actions ou des commandes IC.
Il s'agit de l'une de mes premières tentatives de généralisation de quelque chose, de sorte que vous pouvez reprendre l'idée et la rendre adaptée à votre cas.
Il est peut-être trop tard, mais voici la solution la plus simple et la plus courte.
private void Window_KeyDown(object sender, KeyEventArgs e)
{
if (Keyboard.Modifiers == ModifierKeys.Control && e.Key == Key.S)
{
// Call your method here
}
}
<Window x:Class="Test.MainWindow" KeyDown="Window_KeyDown" >
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.