c# - 如何避免在 WebView 中失去对 HTML 元素的输入焦点?

标签 c# webview uwp

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

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

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

那么,我的问题是,有没有什么方法可以避免在单击 XAML 按钮时失去 DOM 对象的焦点?

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

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

最佳答案

周年更新引入了一个新属性FrameworkElement.AllowFocusOnInteraction对于这种情况。在您的 Button 上将其设置为 false 并且 Button 在单击时不会获得焦点。焦点将停留在 WebView 上,并且选择不应被清除(如果没有,则还有其他事情正在发生)。

在此之前没有好的解决方案。我见过的最糟糕的是在 Button.Click 处理程序中调用 WebView.Focus() 以返回焦点,然后等待焦点事件完成,然后再在 Click 处理程序中继续。

如果您需要针对比周年更新更早的系统,那么您需要在使用 ApiInformation.IsPropertyPresent 检查它是否存在后从代码中设置 AllowFocusOnInteraction。您不能直接在 Xaml 中执行此操作,但可以将检查包装在可从 Xaml 调用的附加属性中。请参阅我的博客条目 ComboBox on a Flyout attached to an AppBarButton loses mouse input on 1607示例代码。

关于c# - 如何避免在 WebView 中失去对 HTML 元素的输入焦点?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39920867/

相关文章:

Android WebView资源文件如js和css文件缓存

Android,在应用程序 WebView 中使用时,URL 是否存储在历史记录中?

c# - 在 UWP 中以编程方式打开屏幕键盘

uwp - 在 UWP AppService 中访问 C 盘文件

c# - MySQL C# 连接器 - 使其不使用 IPv6

c# - 在 PictureBox 中仅使用部分图像

android - 辅助功能和 Android WebView

支持字符串资源的 c# 自定义属性不加载本地化资源

c# - Windows 模拟 : A Flaw in the Ointment

c# - 为什么 View 模型中的单选按钮绑定(bind)被多次触发