我正在创建一个Windows 8.1应用程序,在用户按下按钮后,弹出窗口将在大部分屏幕上打开。 popover中有几个文本框。
我从微软发现了this示例代码,了解如何检测屏幕键盘的外观。
我还发现以下SO帖子和网站基本上告知没有办法强制键盘关闭,而正确的事情实际上是以编程方式将隐藏元素集中在页面上或禁用然后重新启用文本框:
所以我遵循了建议并创建了一个隐形按钮。当用户点击关闭按钮时,它应该关注该按钮并关闭键盘。会发生什么是文本框 失去焦点,但键盘不会消失。如果我使关闭按钮将焦点置于隐藏按钮和关闭弹出窗口(这是所需的效果),键盘不会消失,直到视图(之前在弹出窗口下)是窃听。
如何关闭弹出窗口导致键盘解除?
编辑:似乎可能有一种以编程方式关闭键盘的方法,因为在键盘打开时触发App Bar打开会自动关闭键盘。
答案 0 :(得分:9)
当显示虚拟键盘的文本框被禁用时,它将关闭虚拟键盘。所以解决方案是将文本框属性IsEnabled设置为false并再次将其设置为true,以便它可以再次使用。
TextBox.KeyDown += (s, a) => {
if (a.Key == VirtualKey.Enter) {
TextBox.IsEnabled = false;
TextBox.IsEnabled = true;
}
答案 1 :(得分:2)
无法以编程方式管理触摸键盘的外观和消失。不幸的是,更改IsEnabled
属性对我来说不起作用。
触控键盘外观原理被称为 Focus-driven ,但我已经走了出去,明确地在IsTabStop=True
上设置属性UserControl
。此外,如果TextBox
IsTabStop=false
,TextBox
将无法激活触摸键盘。
理论上,我认为系统搜索下一个潜在的
Focus
, 所以如果是这样的话就不要关闭并重新打开 可触摸+可输入属性。也许在发布TextBox
时会出现一些错误,当前UserControl
只释放他的错误 “可触摸”的焦点,并没有完成释放键盘的 “可输入”焦点,因为默认情况下只有输入控件 具有Tab-Stoppable属性。
顺便说一句,如果我们通过CustomControl
的关闭按钮关闭IsTabStop=true
,那么他的父母就需要{{1}}。
PS:仅在Windows 8.1商店应用程序上测试解决方案。
答案 2 :(得分:0)
答案 3 :(得分:0)
在我的应用中,这很好用:
protected override void OnNavigatedTo(NavigationEventArgs e)
{
this.KeyDown += Strona_KeyDown;
}
private void Strona_KeyDown(object sender, KeyRoutedEventArgs e)
{
if (e.Key == Windows.System.VirtualKey.Enter)
{
this.Focus(FocusState.Pointer);
}
}
答案 4 :(得分:0)
在UWP Windows 10中,简单的禁用/启用不再起作用。但这有效:
TextBox.IsEnabled = false;
var t = new DispatcherTimer();
t.Interval = new TimeSpan(0, 0, 1);
t.Tick += (a, b) =>
{
t.Stop();
TextBox.IsEnabled = true;
};
t.Start();
寻找更优雅的解决方案?请分享。