UWP 应用启动 XBOX 时未触发 Keydown 事件

问题描述 投票:0回答:1

我正在使用 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 事件。

提前致谢。快乐编码!!!

javascript webview uwp
1个回答
0
投票

在进行了一些研究并浏览了 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
事件。

希望这对您有所帮助,祝您编码愉快!!!

© www.soinside.com 2019 - 2024. All rights reserved.