首页 > 解决方案 > 为什么 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 部分

标签: xamlwebviewuwpc++-cxxbox-one

解决方案


好的,经过大量调查和许多死胡同,以下代码修复了这个问题,我不得不假设这是 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);

如果你错过了这些行中的任何一条,那么整个事情就不起作用了。


推荐阅读