В моем приложении 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);
}
}