KeyBinding
De Banane Atomic
Aller à la navigationAller à la recherche
Links
KeyBinding
Branchement de touches du clavier avec des Commands.
Le composant doit avoir le Keyboard Focus pour que les entrées clavier soient capturées.
TextBox
<TextBox Text="{Binding InputValue, UpdateSourceTrigger=PropertyChanged}"> <TextBox.InputBindings> <KeyBinding Key="Enter" Command="{Binding ValidateCmd}" /> </TextBox.InputBindings> </TextBox> |
Window
<Window.InputBindings> <KeyBinding Key="A" Command="{Binding Path=KeyCommand}" CommandParameter="A"/> </Window.InputBindings> |
public RelayCommand KeyCommand { get; set; } KeyCommand = new RelayCommand( param => { switch ((string)param) { case "A": Background = Brushes.AliceBlue; break; case "Z": Background = Brushes.AntiqueWhite; break; } }); |
Attention : Le Binding de type ElementName ne semble pas fonctionner avec KeyBinding.
Keyboard Focus
Il est intéressant de définir le KF dans l'evt MyControl_Loaded
// pour pouvoir avoir le KF, l'élément doit être Focusable this.Focusable = true; // tente de donner le KF à this. Retourne le composant qui a le KF var focusedElement = Keyboard.Focus(this); |
Capture des touches pressées
// capture les touches pressées qui ne sont pas déjà capturées par des sous-controls. KeyDown += new KeyEventHandler(MonControl_KeyDown); // avec le paramètre handledEventsToo à true, capture toutes les touches pressées même celles qui sont pas déjà capturées par des sous-controls. AddHandler(UIElement.PreviewKeyDownEvent, new KeyEventHandler(MonControl_PreviewKeyDown_EventHandled), true); private void MonControl_PreviewKeyDown_EventHandled(object sender, KeyEventArgs e) { // gestion des touches systèmes comme F10 qui affiche le menu // cette touche se trouve dans e.SystemKey au lieu de e.Key qui contient Key.System var key = e.Key == Key.System ? e.SystemKey : e.Key, e); } |
Convertion String → Key
Key myKey; if (Enum.TryParse("Subtract", true, out myKey)) { } var keyConverter = new KeyConverter(); var myKey = keyConverter.ConvertFromString("Subtract"); |
Tester si la touche Ctrl est pressée
private bool IsCtrlKeyDown() { return (Keyboard.GetKeyStates(Key.LeftCtrl) & KeyStates.Down) > 0 || (Keyboard.GetKeyStates(Key.RightCtrl) & KeyStates.Down) > 0; } |