我正在创build一个Windows 8.1应用程序,并在用户按下button后,popup窗口打开了大部分的屏幕。 popup窗口中有几个文本框。
我从Microsoft发现这个示例代码关于如何检测屏幕键盘的外观。
我也发现下面的SOpost和网站基本上通知没有办法强制键盘closures,正确的事情是实际上编程聚焦页面上隐藏的元素或禁用,然后重新启用文本框:
所以我按照build议,创造了一个不可见的button。 当用户点击closuresbutton时,应该将焦点对准该button并closures键盘。 会发生什么是文本框失去了重点,但键盘不会消失。 如果我使closuresbutton将焦点放在隐藏button上并closurespopup窗口(这是所需的效果),则键盘不会消失,直到点击之前的视图(以前在popup窗口中)。
我怎样才能closurespopup导致键盘解雇?
编辑:它似乎有可能以编程方式closures键盘,因为触发应用程序栏打开时,键盘打开时会自动closures键盘。
当显示虚拟键盘的文本框被禁用时,将关闭虚拟键盘。 所以解决方法是将文本框属性IsEnabled设置为false,并将其重新设置为true,以便可以再次使用。
TextBox.KeyDown += (s, a) => { if (a.Key == VirtualKey.Enter) { TextBox.IsEnabled = false; TextBox.IsEnabled = true; }
以编程方式管理触摸键盘的外观和消失是不可能的。 不幸的是,改变IsEnabled
属性不适合我。
触摸键盘的外观原理被称为Focus-driven ,但是我已经明确地通过在UserControl
上设置属性IsTabStop=True
来走出去。 另外,如果TextBox
的IsTabStop=false
, TextBox
将不会激活触摸键盘。
理论上,我认为系统搜索下一个潜在的
TextBox
,所以如果是这样的话,它不会关闭和重新打开, 可触摸+可输入属性。 也许在发布Focus
时有一些bug,目前TextBox
只发布他的“可触摸”焦点,并没有完成释放键盘的“可输入”焦点,因为默认情况下只有输入控件具有Tab-Stoppable属性。
顺便说一句,如果我们通过一个CustomControl
的关闭按钮来关闭UserControl
,那么他的父级需要IsTabStop=true
。
PS:仅在Windows 8.1 Store应用程序上测试解决方案。
在我的应用程序这工作正常:
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); } }
在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();
找到更优雅的解决方案 请分享。