WinUI 3中Frame导航含WebView2的页面时控件无法正常显示求助
解决WinUI 3中Page内WebView2不显示的问题
问题核心原因
WebView2在Page构造阶段尚未加入可视化树,直接调用EnsureCoreWebView2Async()会因控件未完成挂载而卡死;同时Frame默认布局未占满TabViewItem空间,加上过早访问Parent属性,导致空引用异常和控件无法渲染。
具体解决步骤
补全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" <!-- 其他原有属性 --> >在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"); }
- 给Page添加Loaded事件绑定:
设置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);禁止在构造函数中操作WebView2
Page构造阶段WebView2尚未完成可视化树挂载,此时访问Parent属性或调用初始化方法必然引发异常,所有WebView2相关逻辑必须延后至Loaded事件触发后执行。
内容的提问来源于stack exchange,提问作者Eric Nien
相关产品推荐
相关产品推荐

