C# 如何使文本框失去焦点?

C# 如何使文本框失去焦点?,c#,windows-phone-8,C#,Windows Phone 8,当用户触摸Enter虚拟键时,如何使TextBox失去焦点并隐藏屏幕键盘 private void TheName_KeyDown(object sender, KeyRoutedEventArgs e) { var tb = sender as TextBox; if (e.Key == Windows.System.VirtualKey.Enter) { // ... tb.LooseTheFocus_PLEASE(); !??

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

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

无法通过编程方式从控件中移除焦点

一个选项是将焦点设置为表单上的另一个控件,比如一个标签,说明应该在文本框中输入什么类型的文本

这会导致文本框失去焦点

如有关
Control.Focus()
的文档所示:

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


只需使用
Control.Focus(FocusState.prographic)
设置焦点。任何控件都可以。只需将焦点设置为页面

this.Focus();
//
///使虚拟键盘消失
/// 
/// 
专用焦点(对象发送方){
var控制=发送方作为控制;
var isTabStop=control.isTabStop;
control.IsTabStop=false;
control.IsEnabled=false;
control.IsEnabled=true;
control.IsTabStop=IsTabStop;
}
/// 
///当用户按enter键时,使虚拟键盘消失
/// 
/// 
/// 
private void LooseFocusOneNoter(对象发送器,KeyRoutedEventTarget e){
if(e.Key==Windows.System.VirtualKey.Enter){
e、 Handled=true;LoseFocus(发送方);
}
}

很难看。但它是有效的。关键部分是IsTabStop属性。如果我不碰它,键盘会消失几秒钟,然后再次出现。

要在UWP应用程序中解除焦点,只需执行以下操作:

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

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

_first_tb.Focus(FocusState.Programmatic);
_secont_tb.Focus(FocusState.Programmatic);
无论哪一个有焦点,它都会放下焦点并触发您需要的任何事件


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

实际上,您不能这样做。您必须将焦点设置为另一个控件。如何设置?我尝试过这个。Focus(Windows.UI.Xaml.FocusState.Pointer)-被忽略。请尝试[我的解决方案][1]关于在Windows 8上隐藏触摸键盘。[1] :@Harry这可能也应该用UWP标记。Win phone 8已死亡,但这在其他方面仍然有用。这在WP 8.1应用程序中不起作用。Focus需要一个参数,但无论我提供什么,虚拟键盘都会一直保留,直到我单击文本框外的空白处。谢谢,正是它!:)漂亮的接球@Pantelis!这在WP 10中起作用。使用this.Focus(FocusState.prographic);不起作用。当我尝试将焦点设置在标签(或任何其他元素)上时,什么都不会发生。我不想这么说,但我已经尝试过了,但它不起作用。我设置了FocusState.programmatic,这行被忽略了。我尝试了Focus()参数的所有可能值,但没有成功。我试图集中页面、网格、文本块元素,但它就是不起作用。我把代码放在KeyDown处理程序中,也许它不能从那里调用?你的事件被触发了吗?设置一个断点,看看它是否进入你的事件。是的,它被触发了,让我回答我自己的问题,这里有一个丑陋的把戏让它工作…我实际上读了潘泰利斯在评论中给出的答案。糟糕的解决方案,但如果没有其他办法奏效……)您不能将焦点设置在隐藏元素上。与存储控件是否为IsTabStop,然后在更改后恢复为该值的方式相同,我建议对
IsEnabled
也执行同样的操作。另外,可能有点吹毛求疵,但我建议让
LoseFocus()
使用
控件,而不是
对象。最好向调用函数的人指出,您要求他们传入一个
控件
,因为您在内部强制转换该控件(这可能会导致一个容易避免的无效强制转换异常,我真的不喜欢人们在非绝对必要的地方使用
对象
)。
_first_tb.Focus(FocusState.Programmatic);
_secont_tb.Focus(FocusState.Programmatic);