当用户触摸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(); !???
}
}
答案 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);
无论哪个焦点,它都会放下焦点并触发您需要的任何事件。
或者,将焦点放在页面上任何位置的隐藏文本框。