2010-08-03 19 views
5

En mi aplicación Windows Phone 7 tengo un cuadro de texto de una sola línea. Cuando el usuario presiona {ENTER}, quiero aceptar el valor del cuadro de texto y volver a colocar el cuadro de texto en el modo normal de no edición.¿Hay alguna manera de cancelar programáticamente la edición de un cuadro de texto?

Básicamente, ¿hay alguna manera de cancelar programáticamente la edición de un cuadro de texto?

He intentado forzar el Visual State Manager en modo Normal, lo que cambia el estilo visual, pero el cuadro de texto todavía está en modo de edición y el teclado en pantalla todavía se muestra.

  VisualStateManager.GoToState(
       this.MyTextBox, 
       "Normal", 
       true); 

      VisualStateManager.GoToState(
       this.MyTextBox, 
       "Unfocused", 
       true); 

También intenté programáticamente seleccionar un control primario pero eso tampoco parece funcionar.

Creo que me falta algo simple, alguien debe haber hecho esto un millón de veces, cualquier ayuda muy apreciada.

Gracias,

Actualizar: Me trataron de establecer el foco a otro control, pero que no estaba funcionando, el teclado SIP no desaparecerían.

Pero lo descubrí usando otro método. El truco fue usar el indicador IsReadOnly. Cuando perdí el foco o presioné Enter, ajusté el control solo para leer, lo que actualiza el estilo. Todo lo que tenía que hacer era actualizar mis plantillas visuales para que se viera bien y ahora funciona perfectamente.

Por lo que vale la pena, mi código ahora se ve algo como esto:

private void MyTextBox_GotFocus(object sender, RoutedEventArgs e) 
    { 
     this.MyTextBox.IsReadOnly = false; 
     this.MyTextBox.SelectAll();    
    } 

    private void MyTextBox_LostFocus(object sender, RoutedEventArgs e) 
    { 
     this.MyTextBox.IsReadOnly = true; 
    } 

    private void MyTextBox_KeyUp(object sender, KeyEventArgs e) 
    { 
     if (e.Key == Key.Enter) 
     { 

      this.MyTextBox.IsReadOnly = true; 
      VisualStateManager.GoToState(
       this.MyTextBox, 
       "ReadOnly", 
       true); 
      VisualStateManager.GoToState(
       this.MyTextBox, 
       "Unfocused", 
       true); 
      VisualStateManager.GoToState(
       this.MyTextBox, 
       "Valid", 
       true); 
     } 
    } 

Respuesta

3

dos opciones: (¿tal vez una etiqueta)

  1. Enfoque de llamadas() en algún otro control irrelevante
  2. Desactivar y luego habilitar el TextBox (se siente raro, pero funciona).
+1

En lugar de habilitado he usado "IsReadOnly" - pero la misma idea. Gracias! – will

0

Ésta es la forma en que lo hice, basado en la respuesta de Ben:

private void SearchBox_KeyUp(object sender, KeyEventArgs e) 
{ 
    if (e.Key == Key.Enter && !String.IsNullOrEmpty(SearchBox.Text)) 
    { 
    (sender as TextBox).IsEnabled = false; 
    (sender as TextBox).IsEnabled = true; 

    // Process search term here... 
    } 
} 
Cuestiones relacionadas