2010-08-03 19 views
5

Nel mio Windows Phone 7 App ho una casella di testo a riga singola. Quando l'utente preme {INVIO}, voglio accettare il valore della casella di testo e riportare la casella di testo nella normale modalità non edit.Esiste un modo per annullare a livello di codice la modifica di una casella di testo?

Fondamentalmente, esiste un modo per annullare a livello di codice la modifica di una casella di testo?

Ho provato a forzare il Visual State Manager in modalità Normale che cambia lo stile visivo, ma la casella di testo è ancora in modalità di modifica e la tastiera su schermo continua a essere visualizzata.

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

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

Anche provato a selezionare a livello di codice un controllo genitore ma quello non sembra funzionare neanche.

Penso che mi debba mancare qualcosa di semplice, qualcuno deve averlo fatto un milione di volte - qualsiasi aiuto molto apprezzato.

Grazie,

Aggiornamento: Ho provato a impostare lo stato attivo a un altro controllo, ma che non funzionava, la tastiera SIP non avrebbero mai scomparire.

Ma l'ho capito usando un altro metodo. Il trucco era usare la bandiera IsReadOnly. Quando si è smarrito il focus o si è premuto enter, ho impostato il controllo di sola lettura che aggiorna lo stile. Tutto quello che dovevo fare era aggiornare i miei stili visivi in ​​modo da sembrare giusto e ora funziona perfettamente.

Per quel che vale, il mio codice ora sembra qualcosa di simile:

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

risposta

3

due opzioni: (? Forse un Label)

  1. chiamata Focus() su qualche altro controllo irrilevante
  2. Disattiva quindi Abilita il TextBox (si sente hacky, ma funziona).
+1

Invece di abilitato ho usato "IsReadOnly" - ma la stessa idea. Grazie! – will

0

Ecco come ho fatto, in base alla risposta di 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... 
    } 
} 
Problemi correlati