我正在使用 VS2022 上的 WebView 方法为 XBOX 开发 UWP 应用程序。
我正在使用
addEventListener
方法来侦听在 XBOX 控制器上按下任何按钮时触发的所有 keyDown
事件。
但是当我启动应用程序时,keydown 事件根本没有被触发,要访问此 keydown 事件,我需要单击控制器 X 图标并在执行此操作后关闭菜单栏,事件会正确触发。
JS 代码片段:
document.addEventListener(
"keydown",
ev => {
if (ev.keyCode === 196) {
ev.preventDefault(); // I'm using this to prevent the default back functionality of xbox.
}
},
false
);
UWP 代码片段:
public App()
{
this.InitializeComponent();
this.RequiresPointerMode = ApplicationRequiresPointerMode.WhenRequested; // used this method to remove the mouse mode on XBOX.
this.Suspending += OnSuspending;
}
无论如何,有没有可以用来在应用程序启动时触发 keyDown 事件。
提前致谢。快乐编码!!!
在进行了一些研究并浏览了 XBOX 开发的所有微软文档后,我发现了一个 Stack Overflow 问题,它提到了相同的问题,但在不同的场景中,并使用该方法在此 SO 链接中解决了这个问题 为什么在 XBox One 上打开/关闭指南之前,XAML WebView 输入框是否没有光标? 以及本文中提到的评论打开控制器后使用控制器的导航不起作用
在输入框中观察到同样的问题,而在我们的场景中,它是在 addEventListener 中出现的。
导致此问题的主要原因是应用程序启动时焦点没有设置到 WebView。一旦我打开 XBOX 菜单指南并关闭,它就会将焦点设置到 WebView,然后 WebView 就可以监听事件。
要将焦点设置到 WebView,我们需要在代码隐藏中显式添加部分代码,这将有助于在启动应用程序时设置焦点。
private void MyWebView_NavigationCompleted(WebView sender, WebViewNavigationCompletedEventArgs args)
{
MyWebView.Visibility = Visibility.Collapsed;
MyWebView.Visibility = Visibility.Visible;
MyWebView.Focus(FocusState.Keyboard); //here I'm using the keyboard method which worked for me we can go with programmatic method as well.
}
在代码隐藏文件中,我们使用
NavigationCompleted
,一旦 WebView 成功加载所需内容,就会调用它,然后我们使可见性再次折叠和可见,这将有助于将焦点设置在到 WebView 并监听 keyDown
事件。
希望这对您有所帮助,祝您编码愉快!!!