You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

VS2022开发UWP Xbox应用启动时Keydown事件无法触发求助

解决Xbox UWP WebView启动时无法触发keydown事件的问题

问题根源:Xbox平台上UWP应用启动时,系统默认的导航菜单栏会抢占输入焦点,导致WebView控件无法接收控制器按键事件,必须关闭菜单栏后WebView才能获得焦点并响应事件。

以下是具体解决方法:

1. 强制WebView在应用启动时获取焦点

在UWP的页面代码中,通过编程方式让WebView在页面加载完成后获得焦点,确保输入事件能直接传递到WebView。

示例代码(MainPage.xaml.cs):

protected override void OnNavigatedTo(NavigationEventArgs e)
{
    base.OnNavigatedTo(e);
    // 替换为你的WebView控件名称
    MyWebView.Focus(FocusState.Programmatic);
}

如果在App.xaml.cs中处理,也可以在应用初始化完成后,找到主页面的WebView并设置焦点:

protected override void OnLaunched(LaunchActivatedEventArgs e)
{
    Frame rootFrame = Window.Current.Content as Frame;

    if (rootFrame == null)
    {
        rootFrame = new Frame();
        rootFrame.NavigationFailed += OnNavigationFailed;
        Window.Current.Content = rootFrame;
    }

    if (e.PrelaunchActivated == false)
    {
        if (rootFrame.Content == null)
        {
            rootFrame.Navigate(typeof(MainPage), e.Arguments);
        }
        Window.Current.Activate();
        
        // 页面加载完成后设置WebView焦点
        rootFrame.Loaded += (sender, args) =>
        {
            var mainPage = rootFrame.Content as MainPage;
            mainPage?.MyWebView.Focus(FocusState.Programmatic);
        };
    }
}

2. 优化JS事件监听逻辑

将事件监听绑定到window对象,并启用捕获阶段监听,提升事件触发的可靠性:

window.addEventListener(
    "keydown",
    ev => {
        console.log("按键触发:", ev.keyCode); // 用于调试验证
        if (ev.keyCode === 196) {
            ev.preventDefault();
        }
    },
    true // 捕获阶段监听,优先于冒泡阶段
);

3. 检查页面焦点抢占问题

确保应用启动时,没有其他控件(如按钮、文本框)抢占WebView的焦点。可以在XAML布局中设置WebView为页面的第一个可聚焦元素,或者通过代码将其他控件的IsTabStop属性设为false,避免干扰。


内容的提问来源于stack exchange,提问作者Tharun Koti

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.12 23:31:17