как спрятать мягкую клавиатуру в WP7? - PullRequest
4 голосов
/ 01 ноября 2011

В поле ввода TextBox.После ввода клавиши ввода я хочу скрыть программную клавиатуру.Как это сделать в кодах?

private void OnKeyDownHandler(object sender, KeyEventArgs e)
           {
                if (e.Key != Key.Enter)
                   return;         

...}

Ответы [ 2 ]

27 голосов
/ 01 ноября 2011

this.focus() Это позволит потерять фокус из текстового поля. Это в основном ставит акцент на странице вместо. Вы также можете преобразовать текстовое поле в read only, чтобы запретить дальнейший ввод.

Скрыть SIP можно, просто изменив фокус с текстового поля на любой другой элемент на странице. Это не обязательно должен быть this.focus (), это может быть anyElement.focus (). Пока элемент не является вашим текстовым полем, SIP должен скрываться.

2 голосов
/ 01 ноября 2011

Я использую следующий метод для отклонения SIP:

/// 
/// Dismisses the SIP by focusing on an ancestor of the current element that isn't a
/// TextBox or PasswordBox.
/// 
public static void DismissSip()
{
    var focused = FocusManager.GetFocusedElement() as DependencyObject;

    if ((null != focused) && ((focused is TextBox) || (focused is PasswordBox)))
    {
        // Find the next focusable element that isn't a TextBox or PasswordBox
        // and focus it to dismiss the SIP.
        var focusable = (Control)(from d in focused.Ancestors()
                                  where
                                    !(d is TextBox) &&
                                    !(d is PasswordBox) &&
                                    d is Control
                                  select d).FirstOrDefault();
        if (null != focusable)
        {
            focusable.Focus();
        }
    }
 }

Метод Ancestors происходит от LinqToVisualTree Колина Эберхардта.Код используется вместе с обработчиком ключа Enter для «перехода» на следующий TextBox или PasswordBox, поэтому они пропускаются в выделении, но вы можете включить их, если это имеет смысл для вас.

...