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

WinUI 3+WebView2:网页输入框无法唤起Hot Virtual Keyboard

WinUI 3 WebView2 唤起 Hot Virtual Keyboard 问题解决方案

针对你遇到的WinUI 3中WebView2内网页输入框无法唤起Hot Virtual Keyboard的问题,可尝试以下几种解决方案:

1. 配置WebView2核心设置启用触摸交互

WebView2默认的部分设置可能会阻止系统检测到触摸输入焦点,初始化WebView2时需开启相关触摸支持:

private async void WebView2_Initialized(object sender, EventArgs e)
{
    var webView = sender as WebView2;
    await webView.EnsureCoreWebView2Async();
    
    // 启用触摸输入支持
    webView.CoreWebView2.Settings.IsTouchEnabled = true;
    // 保留默认上下文菜单,确保触摸交互信号正确传递
    webView.CoreWebView2.Settings.AreDefaultContextMenusEnabled = true;
    // 禁用WebView2内置缩放控件,避免干扰触摸事件
    webView.CoreWebView2.Settings.IsBuiltInZoomControlEnabled = false;
}

2. 通过焦点事件手动触发虚拟键盘

监听WebView2的焦点变化事件,检测当前焦点是否为输入元素,再调用Hot Virtual Keyboard的唤起API:

private async void WebView2_FocusChanged(object sender, WebView2FocusChangedEventArgs e)
{
    var webView = sender as WebView2;
    if (e.FocusState == CoreWebView2FocusState.Pointer)
    {
        // 执行脚本检测当前焦点是否为输入类元素
        string checkInputScript = @"
            const activeEl = document.activeElement;
            activeEl.tagName === 'INPUT' || activeEl.tagName === 'TEXTAREA' || activeEl.isContentEditable;
        ";
        bool isInputElement = await webView.CoreWebView2.ExecuteScriptAsync(checkInputScript) == "true";
        
        if (isInputElement)
        {
            // 调用Hot Virtual Keyboard的显示方法(需参考其SDK文档)
            HotVirtualKeyboard.Show();
        }
    }
}

3. 配置Windows 11触摸键盘与应用权限

  • 进入Windows设置 → 时间和语言 → 输入 → 触摸键盘,开启“在没有物理键盘时自动显示触摸键盘”,并确保你的WinUI3应用不在排除列表中。
  • 在应用的Package.appxmanifest中添加触摸设备权限:
    <Capabilities>
        <Capability Name="internetClient" />
        <DeviceCapability Name="humaninterfacedevice">
            <Device Id="any">
                <Function Type="usage:0001 *" />
            </Device>
        </DeviceCapability>
    </Capabilities>
    

4. 网页与宿主应用联动触发键盘

通过WebView2的WebMessage机制,让网页在输入框获得焦点时通知WinUI3宿主,宿主主动唤起虚拟键盘:

网页端脚本(嵌入到你的网页中)

document.addEventListener('focusin', (e) => {
    const target = e.target;
    if (target.tagName === 'INPUT' || target.tagName === 'TEXTAREA' || target.isContentEditable) {
        window.chrome.webview.postMessage('show-keyboard');
    }
});

document.addEventListener('focusout', () => {
    window.chrome.webview.postMessage('hide-keyboard');
});

WinUI3端接收消息并处理

private async void WebView2_Initialized(object sender, EventArgs e)
{
    var webView = sender as WebView2;
    await webView.EnsureCoreWebView2Async();
    
    // 启用Web消息接收
    webView.CoreWebView2.Settings.IsWebMessageEnabled = true;
    
    webView.CoreWebView2.WebMessageReceived += (s, args) =>
    {
        string message = args.TryGetWebMessageAsString();
        switch(message)
        {
            case "show-keyboard":
                HotVirtualKeyboard.Show();
                break;
            case "hide-keyboard":
                HotVirtualKeyboard.Hide();
                break;
        }
    };
}

5. 调整Hot Virtual Keyboard的应用触发配置

打开Hot Virtual Keyboard的设置面板:

  • 进入“触发”选项卡,确保“当触摸输入控件时自动显示”处于启用状态。
  • 将你的WinUI3应用进程(以及WebView2的子进程msedgewebview2.exe)添加到应用程序允许列表中,确保虚拟键盘能捕获到该进程的输入焦点事件。

内容的提问来源于stack exchange,提问作者Jiří Darmovzal

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 10:03:16