如何让TextBox失去焦点?

时间:2014-06-16 20:06:50

标签: c# windows-phone-8

当用户触摸TextBox虚拟密钥时,如何使Enter失去焦点并隐藏屏幕键盘?

    private void TheName_KeyDown(object sender, KeyRoutedEventArgs e) {
        var tb = sender as TextBox;
        if (e.Key == Windows.System.VirtualKey.Enter) {
            // ... tb.LooseTheFocus_PLEASE(); !???
        }
    }

5 个答案:

答案 0 :(得分:15)

    /// <summary>
    /// Makes virtual keyboard disappear
    /// </summary>
    /// <param name="sender"></param>
    private void LoseFocus(object sender) {
        var control = sender as Control;
        var isTabStop = control.IsTabStop;
        control.IsTabStop = false;
        control.IsEnabled = false;
        control.IsEnabled = true;
        control.IsTabStop = isTabStop;
    }

    /// <summary>
    /// Makes virtual keyboard disappear when user taps enter key
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    private void LooseFocusOnEnter(object sender, KeyRoutedEventArgs e) {
        if (e.Key == Windows.System.VirtualKey.Enter) {
            e.Handled = true; LoseFocus(sender);
        }
    }

这太丑了。但它的确有效。关键部分是IsTabStop属性。如果我不接触它 - 键盘会耗尽一秒钟并再次重新开始。

答案 1 :(得分:5)

只需将焦点设置到页面即可。

this.Focus();

答案 2 :(得分:2)

要专注于UWP应用,请执行以下操作:

private void Input_KeyDown(object sender, KeyRoutedEventArgs e)
{
    if (e.Key == VirtualKey.Enter)
    {
        //Do what you want upon enter
        this.Focus(FocusState.Programmatic);
    }
}

答案 3 :(得分:1)

无法以编程方式从控件中删除焦点。

一个选项是将焦点设置为表单上的另一个控件,比如一个标签,说明应该在TextBox中输入哪种文本。

这会导致文本框失去焦点。

this关于Control.Focus()的文档中所示:

  

通过使用FocusState.Unfocused作为参数调用此方法,您无法从控件中移除焦点。不允许使用此值并导致异常。要从控件中移除焦点,请将焦点设置为其他控件。

只需使用Control.Focus(FocusState.Programmatic)来设置焦点。任何控制都应该这样做。

答案 4 :(得分:0)

如果您有多个文本框,只需在它们之间转移焦点即可。

_first_tb.Focus(FocusState.Programmatic);
_secont_tb.Focus(FocusState.Programmatic);

无论哪个焦点,它都会放下焦点并触发您需要的任何事件。

或者,将焦点放在页面上任何位置的隐藏文本框。