如何避免将输入焦点丢失在WebView内的HTML元素上?

时间:2016-10-07 15:28:30

标签: c# webview uwp

我目前正在尝试构建一个与UWP应用程序一起使用的触摸键盘。我提出的解决方案之一是使用代理组件通过按钮调用SendKeys函数(IsTabStop设置为false,ClickMode设置为Press以防止输入控件丢失任何焦点)。到目前为止,一切正常(在TextBoxes上测试它没有任何问题)。

问题:我在使用WebView控件遇到一些问题:当我单击一个按钮时,WebView会按预期保持焦点;但是,DOM元素(例如HTML的<input>标记)会丢失输入焦点(同时仍然在视觉上被选中)。

我找到了一种方法来解决这个问题,重点关注webview;但这揭开了另一个问题。假设输入元素被设置为在聚焦时选择所有内容(字符串)。然后,每次单击其中一个按钮时,都会选择内容并替换为我发送给WebView的新信件。

所以,我的问题是,有没有办法避免在点击XAML按钮时失去DOM对象的焦点?

注意:我确实知道InputPane,但是我不能将它用于这个应用程序(由于客户端的一些限制)。另外,如果有什么不清楚,请告诉我,我会尽快编辑。

NB2:我完全无法访问WebView将显示的页面的源代码,也不能依赖于特定元素的存在。

1 个答案:

答案 0 :(得分:0)

周年纪念更新为此方案引入了新属性FrameworkElement.AllowFocusOnInteraction。在按钮上将其设置为false,按钮在单击时不会获得焦点。焦点将保留在WebView上,并且选择不应该被清除(如果没有,那么其他东西也会被清除)。

在此之前,没有一个好的解决方案。我遇到的最不好的事情是在Button.Click处理程序中调用WebView.Focus()来返回焦点,然后等待焦点事件完成,然后再进行点击操作。

如果您需要定位早于周年纪念更新的系统,那么在检查ApiInformation.IsPropertyPresent存在之后,您需要从代码中设置AllowFocusOnInteraction。您无法在Xaml中直接执行此操作,但您可以将检查包装在可以从Xaml调用的附加属性中。有关示例代码,请参阅我的博客条目ComboBox on a Flyout attached to an AppBarButton loses mouse input on 1607