即使我将焦点设置为控件,Windows 10 uwp也会隐藏软键盘

时间:2017-01-20 02:00:26

标签: c# uwp windows-10-universal windows-10-mobile

我有一个Windows 10移动uwp应用程序,我有两个问题。

首先,我将焦点设置为应用程序中的控件。我通过成功使用公共呼叫来做到这一点

 Control.Focus(FocusState.Programmatic);

但是,在某些情况下,这不起作用。大多数情况下,但是例如,当我的页面加载时,我试图在其中一个字段中设置初始焦点,但它不起作用。我曾在两个地方试过这个电话。首先,在页面的构造函数中,在InitializeComponenets之后,还在覆盖onNavigatedTo方法中。在哪里调用它的最佳位置以及它可能看起来不起作用的原因是什么,特别是在实例化新页面时?

第二,与设定焦点有关。我的UI上有一个文本框,我使用上面列出的相同Programmatic焦点调用来设置控件。然而,软(屏幕上)键盘显示何时发生这种情况。我不希望它以编程方式设置焦点时显示,但如果用户选择该字段则显示它。场景是我有条形码扫描仪。当页面加载时,我将焦点设置在文本框的代码中,因此我可以根据条形码扫描结果从代码中设置文本框中的文本。用户几乎不需要键入该字段。因此,我不需要或想要键盘显示和占用房地产。有一种罕见的情况,我允许他们仍然手动键入文本,例如,在条形码不读取的情况下。然后他们会选择控件(即使它可能已经以编程方式进行了聚焦),这应该再次设置焦点,而是作为光标,触摸或其他东西,然后我想显示软键盘。

这样做的最佳方式是什么?

谢谢!

2 个答案:

答案 0 :(得分:3)

我认为调用Focus()的最佳位置是您尝试关注的同一控件的Loaded事件处理程序。当此控件完全加载时,表示它已准备好进行交互,包括聚焦。

至于防止出现屏幕键盘,TextBox类具有PreventKeyboardDisplayOnProgrammaticFocus属性。尝试将其设置为true,这可以解决您的问题。

答案 1 :(得分:3)

至于除了TextBox之外的其他任何东西都不适合我,我找到了一个很好的解决方案:

我致电:

using Windows.UI.ViewManagement;

InputPane.GetForCurrentView().TryHide();

并且键盘被隐藏。