xaml - 为什么 XAML WebView 输入框在我打开/关闭 Xbox One 上的指南之前没有光标?
问题描述
好的,我在 Xbox One 上运行了 C++/CX/XAML UWP 游戏。
它有一个 SwapChainPanel,其中包含一个用于 UI 覆盖的 WebView 和一个运行游戏的 Canvas。
当我启动时,Webview 是全屏的,并且画布没有做任何事情。控制器导航 Web UI 没有问题,向上/向下/向左/向右,“a”用于选择,“b”用于返回/暂停。这种导航是使用 JS Gamepad API 完成的,而不是鼠标模式。
当我在 webview 中选择一个输入字段时,问题就来了。我可以突出显示该框,我可以按 A,我可以导航离开,但我没有在框中看到光标并且没有出现软键盘。这就是问题; 我无法在输入框中输入任何内容。
但是,如果我按下控制器上的“Xbox 按钮”以调出指南侧边栏,然后再次按下“Xbox 按钮”以将其关闭,则光标会突然出现在所选输入框中,然后按“a”会调出软键盘,一切都很好。从这一点开始,我选择的任何文本框都可以正常工作。
那么,为什么我第一次加载应用程序时它不起作用?我没有做什么我需要做的事情?
我怀疑存在某种焦点问题,但使用 GotFocusEventHandler() 报告焦点事件只会显示 Webview 在应用程序启动时获得焦点,从指南侧边栏返回时也是如此。强制调用 webView->Focus(FocusState::Programmatic); 输入框高亮时没有报告焦点事件,大概是因为webview已经是焦点了。
在进一步调查中,如果我通过 HTTP URL 访问该页面,该页面可以正常工作,但如果我使用 HTTPS,则该页面无法正常工作。我看不到任何明显的错误消息,并且两个版本的 URL 都出现在清单的 Content URIs 部分
解决方案
好的,经过大量调查和许多死胡同,以下代码修复了这个问题,我不得不假设这是 Edge WebView 中的一个错误。
webView->Visibility = Visibility::Collapsed;
webView->Visibility = Visibility::Visible; // Yes, I know I just changed this but it needs changing twice.
webView->Focus(FocusState::Programmatic);
如果你错过了这些行中的任何一条,那么整个事情就不起作用了。
推荐阅读
- python - 如何在 Python tkinter 中获取入口值?
- r - 获取基本地图而不是通过数据指定的地图
- android - 如何使用 Espresso 长按 RecyclerView 中的项目
- c - 在C中为结构的二维数组元素赋值
- python - 如何使用 Kivy 将 TextInput 转换为地图视图的浮点数
- ios - 如何修复不为 iOS 构建的 React Native App
- angular - Angular - 如何通过选择器将事件绑定到 HTML 元素?
- python - 在 Tkinter 中更新文本小部件中的值
- reporting-services - 用于从 oracle 数据库中过滤数据集时,多值参数不起作用
- python - 根据视图中的计算字段对 django ListView 进行排序