2011-11-09 28 views
5

Estoy tratando de desencadenar un evento cuando el usuario presiona ctrl - x utilizando el evento KeyDown. Esto funciona muy bien para ctrl - D pero el evento no se activa cuando ctrl - se pulsa x. Supongo que esto es porque ctrl - x es el comando "cortar". ¿Hay alguna manera de desencadenar un evento cuando se presiona ctrl - X?Captura Ctrl-X con el evento KeyDown de un cuadro de texto en WPF

private void textBox_KeyDown(object sender, KeyEventArgs e) 
{ 
    if (e.KeyboardDevice.IsKeyDown(Key.LeftCtrl) || e.KeyboardDevice.IsKeyDown(Key.RightCtrl)) 
    { 
     switch (e.Key) 
     { 
      case Key.D: 
       //handle D key 
       break; 
      case Key.X: 
       //handle X key 
       break; 
     } 
    } 
} 
+0

¿Por qué no se maneja el comando en lugar del evento? –

+0

¿Cómo puedo hacer eso, hay una manera de anular el comando 'cortar' de un TextBox? – dregan

Respuesta

6

Puede anular la orden de corte existente:

<TextBox> 
    <TextBox.InputBindings> 
     <KeyBinding Key="X" Modifiers="Control" Command="{Binding TestCommand}" /> 
    </TextBox.InputBindings> 
</TextBox> 

Usted necesita crear un command sin embargo.

+0

Gracias, no pude obtener esto para trabajar en xaml (incluso creó una propiedad dependiente para el comando) pero funcionó bien en el código subyacente. – dregan

-1

intento siguiente en el evento KeyDown

 if (e.Control == true && e.KeyCode==keys.x) 
     { 
      e.Handled = true; 
      textBox1.SelectionLength = 0; 
      //Call your method 
     } 
+0

Supongo que el objeto e es KeyEventArgs. Esto no parece tener propiedades de Control o KeyCode. Ver mi edición anterior para el código. El evento disparará por la tecla 'ctrl' pero no se dispara cuando se presiona la tecla 'x' mientras se mantiene presionada la tecla 'ctrl' – dregan

+0

agregaste wpf después de publicar mi respuesta por eso hay confusión –

9

hacer eso en WPF que intento esto:

private void HandleKeyDownEvent(object sender, KeyEventArgs e) 
{ 
    if (e.Key == Key.X && (Keyboard.Modifiers & ModifierKeys.Control) == ModifierKeys.Control) 
    { 
     MessageBox.Show("You press Ctrl+X :)"); 
    } 
} 
+0

por qué escribió: if (e.Key == Key.X && (Keyboard.Modifiers y ModifierKeys.Control) == ModifierKeys.Control) {} lugar si (== e.Key clave. X && (Keyboard.Modifiers == ModifierKeys.Control)) { } ? –

Cuestiones relacionadas