2014-10-31 4 views
6

Я хочу скрыть мягкую клавиатуру, когда Введите ключ, но решения для меня не работают должным образом. (Windows Phone 8.1 Универсальное приложение)Как скрыть функциональную клавиатуру Windows Phone 8.1?

Это один просто не работает:

if (e.Key == VirtualKey.Enter) 
{ 
    textBox.IsEnabled = false; 
    textBox.IsEnabled = true; 
} 

Способ, как это:

private void LoseFocus(object sender) 
{ 
    var control = sender as Control; 
    var isTabStop = control.IsTabStop; 
    control.IsEnabled = false; 
    control.IsTabStop = false; 
    control.IsEnabled = true; 
    control.IsTabStop = isTabStop; 
} 

работает только частично. Это скрывает клавиатуру, только когда я использую текстовое поле в первый раз. Во второй раз снова появляется клавиатура.

+0

Помните, что если вы включите 'IsEnabled' и назад в том же методе, форма не будет регистрировать ваш изменяется до _after_, метод завершается. Вы можете переключить значение, которое вы хотите в пределах метода, но имеет значение только результат после выполнения функции. – gunr2171

ответ

2

я только что сделал что-то подобное, и это работает:

private async void makeRequest(string title, int page) 
    { 
     myTextBox.IsEnabled = false; 
     myTextBox.IsTabStop = false; 
     // here is my httprequest and changing itemssource of listview 
     myTextBox.IsEnabled = true; 
     myTextBox.IsTabStop = true; 
    } 
17

Существует прямая поддержка API, чтобы скрыть и показать InputPane. Вам не нужно пытаться подделывать систему.

Windows.UI.ViewManagement.InputPane. TryShow и TryHide доступны на Windows Phone 8.1.

Другой вариант - переместить фокус на более подходящий элемент управления, когда пользователь нажимает Enter.

+0

Это перестает отображаться снова, когда я снова нажимаю текстовое поле ... – Denny

9

Это полный код, чтобы скрыть клавиатуру, когда пользователь нажимает клавишу ввода

private void TextBox_KeyUp(object sender, KeyRoutedEventArgs e) 
    { 
     if(e.Key==Windows.System.VirtualKey.Enter) 
     { 
      Windows.UI.ViewManagement.InputPane.GetForCurrentView().TryHide(); 
     } 
    }