2010-08-03 2 views
5

В моем приложении 7 телефона Windows У меня есть однострочное текстовое поле. Когда пользователь нажимает {ENTER}, я хочу принять значение текстового поля и переключить текстовое поле обратно в обычный режим без редактирования.Есть ли способ программно отменить редактирование текстового поля?

В принципе, есть ли способ программно отменить редактирование текстового поля?

Я попытался заставить диспетчера визуальных состояний в нормальном режиме изменять визуальный стиль, но текстовое поле все еще находится в режиме редактирования, и экранная клавиатура все еще отображается.

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

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

Также попытался программно выбрать родительский элемент управления, но это тоже не работает.

Я думаю, что я, должно быть, пропустил что-то простое, кто-то, должно быть, сделал это миллион раз - любая помощь очень ценится.

Спасибо,

Update: Я попытался установить фокус на другой элемент управления, но это не работает, SIP клавиатура никогда не исчезнет.

Но я понял, используя другой метод. Фокус в том, чтобы использовать флаг IsReadOnly. Когда нажата потерянная фокусировка или ввод, я вернул элемент управления только для чтения, который обновляет стиль. Все, что мне нужно было сделать, это обновить мои визуальные stlyes, чтобы он выглядел правильно и теперь работает отлично.

Для чего это стоит, мой код выглядит примерно так:

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

ответ

3

Два варианта: (? Может быть, этикетка)

  1. Вызов Фокус() на какой-либо другой неактуальной управления
  2. Отключить, затем Включить TextBox (чувствует себя взломанным, но работает).
+1

Вместо включен я использовал «IsReadOnly» - но та же идея. Спасибо! – will

0

Это, как я это сделал, основываясь на ответе Бена:

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