我有一个Windows 10移动uwp应用程序,我有两个问题。
首先,我将焦点设置为应用程序中的控件。我通过成功使用公共呼叫来做到这一点
Control.Focus(FocusState.Programmatic);
但是,在某些情况下,这不起作用。大多数情况下,但是例如,当我的页面加载时,我试图在其中一个字段中设置初始焦点,但它不起作用。我曾在两个地方试过这个电话。首先,在页面的构造函数中,在InitializeComponenets之后,还在覆盖onNavigatedTo方法中。在哪里调用它的最佳位置以及它可能看起来不起作用的原因是什么,特别是在实例化新页面时?
第二,与设定焦点有关。我的UI上有一个文本框,我使用上面列出的相同Programmatic焦点调用来设置控件。然而,软(屏幕上)键盘显示何时发生这种情况。我不希望它以编程方式设置焦点时显示,但如果用户选择该字段则显示它。场景是我有条形码扫描仪。当页面加载时,我将焦点设置在文本框的代码中,因此我可以根据条形码扫描结果从代码中设置文本框中的文本。用户几乎不需要键入该字段。因此,我不需要或想要键盘显示和占用房地产。有一种罕见的情况,我允许他们仍然手动键入文本,例如,在条形码不读取的情况下。然后他们会选择控件(即使它可能已经以编程方式进行了聚焦),这应该再次设置焦点,而是作为光标,触摸或其他东西,然后我想显示软键盘。
这样做的最佳方式是什么?
谢谢!
答案 0 :(得分:3)
我认为调用Focus()
的最佳位置是您尝试关注的同一控件的Loaded
事件处理程序。当此控件完全加载时,表示它已准备好进行交互,包括聚焦。
至于防止出现屏幕键盘,TextBox
类具有PreventKeyboardDisplayOnProgrammaticFocus
属性。尝试将其设置为true
,这可以解决您的问题。
答案 1 :(得分:3)
至于除了TextBox之外的其他任何东西都不适合我,我找到了一个很好的解决方案:
我致电:
using Windows.UI.ViewManagement;
InputPane.GetForCurrentView().TryHide();
并且键盘被隐藏。