2010-08-03 7 views
5

In meiner Windows Phone 7 App habe ich eine einzelne Zeile Textbox. Wenn der Benutzer {ENTER} drückt, möchte ich den Textbox-Wert akzeptieren und das Textfeld in den normalen Nicht-Bearbeitungsmodus zurückschalten.Gibt es eine Möglichkeit, die Bearbeitung eines Textfelds programmgesteuert abzubrechen?

Gibt es im Prinzip eine Möglichkeit, die Bearbeitung einer Textbox programmgesteuert abzubrechen?

Ich habe versucht, den Visual State Manager in den normalen Modus zu zwingen, der den visuellen Stil ändert, aber das Textfeld befindet sich immer noch im Bearbeitungsmodus und die Bildschirmtastatur wird immer noch angezeigt.

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

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

Auch versucht, ein übergeordnetes Steuerelement programmgesteuert auszuwählen, aber das scheint auch nicht zu funktionieren.

Ich denke, ich muss etwas einfach vermissen, jemand muss dies millionenfach getan haben - jede Hilfe sehr geschätzt.

Danke,

aktualisieren: Ich habe versucht, den Fokus auf ein anderes Steuerelement zu setzen, aber das nicht funktioniert, würde die SIP-Tastatur nie verschwinden.

Aber ich habe es mit einer anderen Methode herausgefunden. Der Trick bestand darin, das IsReadOnly-Flag zu verwenden. Wenn verlorener Fokus oder Eingabe gedrückt wurde, setze ich das Steuerelement zurück, um nur zu lesen, was den Stil aktualisiert. Alles, was ich tun musste, war meine Visual Stlyes zu aktualisieren, damit es richtig aussieht und jetzt perfekt funktioniert.

Für das, was es wert ist, mein Code sieht jetzt so etwas wie folgt aus:

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

Antwort

3

zwei Optionen: (vielleicht ein Etikett)

  1. Anruf Focus() auf einem anderen irrelevanten Kontroll
  2. Deaktivieren Sie dann die TextBox aktivieren (fühlt sich Hacky, aber es funktioniert).
+1

Statt aktiviert I "IsReadOnly" verwendet - aber die gleiche Idee. Danke! – will

0

Dies ist, wie ich es tat, basierend auf Ben Antwort:

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... 
    } 
} 
Verwandte Themen