2010-08-03 17 views
5

W mojej aplikacji Windows Phone 7 mam pole tekstowe z pojedynczym wierszem. Kiedy użytkownik naciśnie {ENTER}, chcę zaakceptować wartość pola tekstowego i przełączyć pole tekstowe z powrotem do normalnego trybu bez edycji.Czy istnieje sposób programowego anulowania edycji pola tekstowego?

Zasadniczo czy istnieje sposób programowego anulowania edycji pola tekstowego?

Próbowałem wymusić stan wizualny Menedżera stanu w trybie normalnym, który zmienia styl wizualny, ale pole tekstowe nadal znajduje się w trybie edycji, a klawiatura ekranowa jest nadal wyświetlana.

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

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

Próbowano również programowo wybrać kontrolę nadrzędną, ale to też nie działa.

Chyba brakuje mi czegoś prostego, ktoś musiał zrobić to milion razy - każdą pomoc docenioną.

Dzięki,

Aktualizuj: Próbowałem ustawić ostrość na inny Kontroli ale to nie działa, klawiatura SIP nigdy nie zniknie.

Ale wymyśliłem to za pomocą innej metody. Sztuką było użycie flagi IsReadOnly. Po naciśnięciu klawisza "zagubiony" lub "enter" ustawiam kontrolkę z powrotem na "tylko do odczytu", co aktualizuje styl. Jedyne, co musiałem zrobić, to zaktualizować moje wizualne reklamy, aby wyglądały dobrze i teraz działają idealnie.

Na co warto, mój kod wygląda teraz tak:

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

Odpowiedz

3

dwie opcje: (? Może z Label)

  1. połączeń ostrości() na innej kontroli nieistotnego
  2. Wyłącz, a następnie włącz TextBox (czuje się haker, ale działa).
+1

Zamiast włączona użyłem „IsReadOnly” - ale ten sam pomysł. Dzięki! – will

0

To jak to zrobiłem, w oparciu o odpowiedź Bena:

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... 
    } 
} 
Powiązane problemy