una teclas tecla pulsadas pulsada presionar presionada net mostrar evento detectar deteccion capturar wpf

wpf - teclas - mostrar tecla presionada c#



Crear KeyBinding en WPF con más de una tecla modificadora (4)

Aquí está mi código para implementar teclas de acceso directo de múltiples caracteres, como Alt + P + A en WPF MVVM.

Agregue esto a su XAML (comportamiento adjunto para el evento KeyDown):

cb:ShortCutBehavior.Command="{Binding Shortcuts.CmdKeyPressed}"

Agregue esto a su modelo de vista:

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

Estos son dos ejemplos de agregar accesos directos. El primero es un atajo de doble letra: Alt + P + A que ejecuta el método AddOrganization () y el segundo es un atajo de una sola letra: Alt + A que ejecuta el ICommand CmdAddNewAgreemnt.

Tanto AddDoubleLetterShortCut como AddSingleLetterShortCut están sobrecargados para aceptar Acciones o ICommands.

Este es uno de mis primeros intentos de generar algo, para que pueda tomar la idea y hacerla adecuada para usted.

La forma en que creé KeyBinding fue algo así como:

<KeyBinding Modifiers="Ctrl" Key="S" Command="{Binding SaveCommand}" />

Pero, ¿y si necesitaba dos teclas modificadoras? Por ejemplo, Ctrl + Shift .


La documentación indica que puedes simplemente separar los modificadores con el carácter + :

<KeyBinding Modifiers="Ctrl+Shift" Key="S" Command="{Binding SaveCommand}" />

Vea here los detalles sangrientos, con los bits relevantes extraídos a continuación en caso de que el enlace desaparezca alguna vez:

XAML

<object property="oneOrMoreModifierKeys"/>

Valores XAML

oneOrMoreModifierKeys - Una o más teclas modificadoras, definidas por la enumeración ModifierKeys , delimitadas con un carácter + .

También puede usar un gesto por sí solo en lugar de un combo de tecla / modificador:

<KeyBinding Gesture="Ctrl+Shift+S" Command="{Binding SaveCommand}" />

según el mismo enlace de documentación:

Al definir un KeyBinding en XAML, hay dos formas de especificar KeyGesture.

La primera forma de establecer un KeyBinding en XAML es definir el atributo Gesture del elemento KeyBinding, que habilita una sintaxis para especificar claves y modificadores como una sola cadena, por ejemplo "CTRL + P".

La segunda forma es definir el atributo clave y los atributos modificadores del elemento KeyBinding.

Ambas formas de establecer KeyGesture son equivalentes y modifican el mismo objeto subyacente, pero habrá un conflicto si se usan ambas. En el caso en que los atributos Clave, Modificadores y Gesto estén todos configurados, el atributo que se define al final se usará para KeyGesture.


Sé que la pregunta es para XAML, pero aquí hay una muestra si quieres hacerlo en código (varias ModifierKeys pueden especificarse mediante OR lógico):

new KeyBinding( SaveCommand, Key.S, ModifierKeys.Control | ModifierKeys.Shift )


<KeyBinding Command="{Binding SaveCommand}" Gesture="Ctrl+Shift+S" />

Consulte la documentación de MSDN, KeyBinding Class .