WPF集成Blazor项目中如何正确配置WebView2相关参数
错误原因
- CS0649报错是因为你声明的
_WebView字段从未被赋值,始终为null,编译阶段就会提示该字段永远是默认值。 - 运行时空引用异常是因为你在窗口构造函数中尝试访问WebView2配置,此时BlazorWebView控件还未完成加载,WebView2核心运行时也未初始化,相关属性自然是空值。
正确配置步骤
第一步:修改XAML代码,给BlazorWebView控件添加名称标识
<wv:BlazorWebView x:Name="BlazorWebViewControl" HostPage="wwwroot/index.html" Services="{StaticResource services}"> <wv:BlazorWebView.RootComponents> <wv:RootComponent Selector="#app" ComponentType="{x:Type local:main}" /> </wv:BlazorWebView.RootComponents> </wv:BlazorWebView>
第二步:修改后台C#代码,等待WebView2初始化完成后再修改配置
using Microsoft.AspNetCore.Components.WebView.WebView2; public partial class MainWindow : Window { public MainWindow() { var blazorCollection = new ServiceCollection(); blazorCollection.AddBlazorWebView(); Resources.Add("services", blazorCollection.BuildServiceProvider()); InitializeComponent(); // 订阅控件加载完成事件 BlazorWebViewControl.Loaded += OnBlazorWebViewLoaded; } private async void OnBlazorWebViewLoaded(object sender, RoutedEventArgs e) { // 等待WebView2核心运行时初始化完成 await BlazorWebViewControl.WebView.EnsureCoreWebView2Async(); // 此时可以安全修改配置项 BlazorWebViewControl.WebView.CoreWebView2.Settings.IsZoomControlEnabled = false; BlazorWebViewControl.WebView.CoreWebView2.Settings.AreDevToolsEnabled = false; } }
如果需要使用ICoreWebView2Wrapper接口操作,初始化完成后通过BlazorWebViewControl.WebView就可以拿到对应实例,不需要单独声明字段存储。
内容的提问来源于stack exchange,提问作者Brian Brince
相关产品推荐
相关产品推荐

