Есть ли способ программно отменить редактирование текстового поля? - PullRequest
5 голосов
/ 03 августа 2010

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

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

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

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

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

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

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

Спасибо

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

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

Как бы то ни было, мой код теперь выглядит примерно так:

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

Ответы [ 2 ]

3 голосов
/ 03 августа 2010

Два варианта:

  1. Вызвать Фокус () на каком-то другом не относящемся к делу элементе управления (может быть, Метка?)
  2. Отключить, затем включить TextBox (кажется хакерским, но работает).
0 голосов
/ 20 января 2011

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

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...
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...