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

WinUI 3中Frame导航含WebView2的页面时控件无法正常显示求助

解决WinUI 3中Page内WebView2不显示的问题

问题核心原因

WebView2在Page构造阶段尚未加入可视化树,直接调用EnsureCoreWebView2Async()会因控件未完成挂载而卡死;同时Frame默认布局未占满TabViewItem空间,加上过早访问Parent属性,导致空引用异常和控件无法渲染。

具体解决步骤

  1. 补全XAML命名空间引用
    确保Page的XAML头部添加WebView2所属的命名空间,否则controls:WebView2无法被正确识别:

    <Page
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:controls="using:Microsoft.UI.Xaml.Controls"
        <!-- 其他原有属性 -->
        >
    
  2. 在Page的Loaded事件中初始化WebView2
    Page构造函数执行时,控件还未挂载到可视化树,必须延后到Loaded事件(控件已加入界面树后)执行初始化操作:

    • 给Page添加Loaded事件绑定:
      <Page Loaded="Page_Loaded" ...>
      
    • 后台C#代码实现初始化:
      private async void Page_Loaded(object sender, RoutedEventArgs e)
      {
          if (Browser.CoreWebView2 == null)
          {
              await Browser.EnsureCoreWebView2Async();
          }
          // 初始化完成后设置导航地址
          Browser.Source = new Uri("https://www.google.com");
      }
      
  3. 设置Frame的布局为全屏拉伸
    创建Frame时显式设置水平/垂直对齐方式为Stretch,确保Page能占满TabViewItem的全部空间:

    // Adding a Tab with Frame
    muxc.TabViewItem NewTab = new();
    Frame TabFrame = new()
    {
        HorizontalAlignment = HorizontalAlignment.Stretch,
        VerticalAlignment = VerticalAlignment.Stretch
    };
    NewTab.Content = TabFrame;
    NewTab.Header = "New";
    TabFrame.Navigate(typeof(TabPage));
    TabControl.TabItems.Add(NewTab);
    
  4. 禁止在构造函数中操作WebView2
    Page构造阶段WebView2尚未完成可视化树挂载,此时访问Parent属性或调用初始化方法必然引发异常,所有WebView2相关逻辑必须延后至Loaded事件触发后执行。

内容的提问来源于stack exchange,提问作者Eric Nien

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 18:43:14