2011-11-09 16 views
5

Sto cercando di attivare un evento quando l'utente preme ctrl - x utilizzando l'evento KeyDown. Questo funziona bene per ctrl - D ma l'evento non attiva quando ctrl - viene premuto x. Sto indovinando questo è perché ctrl - x è il comando "taglia". C'è un modo per attivare un evento quando ctrl - X viene premuto?Cattura Ctrl-X con l'evento KeyDown di una casella di testo in 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

Perché non si fa a gestire il comando piuttosto che l'evento? –

+0

Come faccio, esiste un modo per sovrascrivere il comando 'taglia' di un TextBox? – dregan

risposta

6

È possibile ignorare il comando cut esistente:

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

È necessario creare un command però.

+0

Grazie, non ho potuto ottenere questo per funzionare in xaml (anche creato una proprietà di dipendenza per il comando) ma ha funzionato bene nel codice dietro. – dregan

-1

prova a seguire in caso keydown

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

Suppongo che l'oggetto e sia KeyEventArgs. Questo non sembra avere proprietà Control o KeyCode. Vedere la mia modifica sopra per il codice. L'evento scatterà per il tasto 'ctrl' ma non sparerà quando si preme il tasto 'x' tenendo premuto il tasto 'ctrl' – dregan

+0

hai aggiunto wpf dopo che ho postato la mia risposta ecco perché qualche confusione –

9

di farlo in WPF provo questo:

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

Perché hai scritto: if (e.Key == Key.X && (Keyboard.Modifiers & ModifierKeys.Control) == ModifierKeys.Control) {} invece se (e.Key == chiave. X && (Keyboard.Modifiers == ModifierKeys.Control)) { } ? –

Problemi correlati