改变焦点后,键盘也不会closures

我正在创build一个Windows 8.1应用程序,并在用户按下button后,popup窗口打开了大部分的屏幕。 popup窗口中有几个文本框。

我从Microsoft发现这个示例代码关于如何检测屏幕键盘的外观。

我也发现下面的SOpost和网站基本上通知没有办法强制键盘closures,正确的事情是实际上编程聚焦页面上隐藏的元素或禁用,然后重新启用文本框:

  • 强制Windows 8软键盘隐藏
  • Windows 8软键盘没有隐藏
  • 显示/隐藏键盘自动Widnows 8
  • 如何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来走出去。 另外,如果TextBoxIsTabStop=falseTextBox将不会激活触摸键盘。

理论上,我认为系统搜索下一个潜在的TextBox ,所以如果是这样的话,它不会关闭和重新打开, 可触摸+可输入属性。 也许在发布Focus时有一些bug,目前TextBox只发布他的“可触摸”焦点,并没有完成释放键盘的“可输入”焦点,因为默认情况下只有输入控件具有Tab-Stoppable属性。

顺便说一句,如果我们通过一个CustomControl的关闭按钮来关闭UserControl ,那么他的父级需要IsTabStop=true

PS:仅在Windows 8.1 Store应用程序上测试解决方案。

请检查我的答案,以我自己的问题:

https://stackoverflow.com/a/24252140/126537

基于@Paul的回答。 不是很优雅,但作为魅力。

在我的应用程序这工作正常:

 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(); 

找到更优雅的解决方案 请分享。