2011-05-08 11 views
5

que tiene un cuadro de texto en XAML:teléfono 7 Manejo de Windows retroceso KeyDown evento

<TextBox Text="blah" 
     Name="blah" 
     LostFocus="blah_OnLostFocus" 
     KeyDown="blah_OnKeyDown"/> 

archivo .cs ha el suceso siguiente declarado:

private void blah_OnKeyDown(object sender, KeyEventArgs e) 
    { 
     TextBox t = sender as TextBox; 
     int i = 0; 
     if(e.Key == Key.Delete) 
      i = 1; 
    } 

Al pulsar la tecla de retroceso en el teclado del emulador , el evento es ignorado Si presiono cualquier otro botón, se desencadena. Además, cuando uso el mismo cuerpo de evento para el evento KeyUp, la tecla de retroceso lo desencadena.

¿Cómo realizo un seguimiento cuando se presionó la tecla de retroceso para el evento KeyDown? ¿Por qué presionar la tecla de retroceso no activa el evento KeyDown?

Gracias.

Respuesta

6

El botón de retroceso es manejado internamente por el control de cuadro de texto. El control tomará el evento de retroceso y eliminará una letra y no generará el evento en su evento. Esto es por diseño. Notarás que si no hay letras en el cuadro de texto, entonces el evento se borra. Para evitar esto, puede usar AddHandler para manejar el evento. Trate de hacer esto:

//Handle the mainpage loaded event and add the handler to the textbox 
void MainPage_Loaded(object sender, RoutedEventArgs e) 
{ 
    textBox1.AddHandler(TextBox.KeyDownEvent, new KeyEventHandler(blah_KeyDown), true); 
} 

luego cambia de controlador de eventos KEY_DOWN a esto:

private void blah_OnKeyDown(object sender, KeyEventArgs e) 
{ 
    TextBox t = sender as TextBox; 
    int i = 0; 
    if(e.Key == Key.Back) 
      i = 1; 
} 

que debería tener el cuadro de texto manejan internamente el evento, sino que también llaman su evento OnKeyDown.

+0

Como una extensión de esta respuesta, vea esta publicación en los foros de Silverlght http://forums.silverlight.net/forums/p/83981/217568.aspx – Stuart

+0

Esto funcionó, solo tuve que poner la instrucción textBox1.AddHandler ... en el constructor de la página, pero el evento parece haber sido activado dos veces. Sin embargo, está bien, gracias por la interesante información sobre la tecla de retroceso que no burbujea a menos que el cuadro de texto esté vacío, me gusta ese comportamiento. Para aquellos que aún necesitan controlar cada tecla de retroceso, presione, el evento KeyUp funciona perfectamente para ese propósito. – Eugene

Cuestiones relacionadas