C# 从同一项目中的另一个XAML窗口访问CoreWebView2时,它为空
控件位于C# 从同一项目中的另一个XAML窗口访问CoreWebView2时,它为空,c#,wpf,xaml,webview2,C#,Wpf,Xaml,Webview2,控件位于主窗口.xaml内(如下所示)。当从MainWindow.xaml.cs中的按钮单击事件调用时(代码如下所示),它工作正常。但是当从另一个类另一个window.xaml.cs(在同一个项目中)访问webview 2控件并调用相同的ExecuteScriptAsync(…)方法时,它抱怨corewebview 2为空 问题:我可能缺少什么,如何解决 主窗口.xaml: <Window x:Class="WpfWebView2TEST.MainWindow"
主窗口.xaml
内(如下所示)。当从MainWindow.xaml.cs
中的按钮单击事件调用时(代码如下所示),它工作正常。但是当从另一个类另一个window.xaml.cs
(在同一个项目中)访问webview 2
控件并调用相同的ExecuteScriptAsync(…)
方法时,它抱怨corewebview 2
为空
问题:我可能缺少什么,如何解决
主窗口.xaml:
<Window x:Class="WpfWebView2TEST.MainWindow"
.....
xmlns:wv2="clr-namespace:Microsoft.Web.WebView2.Wpf;assembly=Microsoft.Web.WebView2.Wpf"
mc:Ignorable="d"
Style="{StaticResource CustomWindowStyle}"
Title="MainWindow" Height="450" Width="800">
<Grid>
<Button x:Name="btnTest" Content=Test" Click="btnTest_Click"/>
<wv2:WebView2 Name="webView" />
</Grid>
</Window>
调试模式如下所示,CoreWebView2
不为空(因此代码正常工作):
备注2:当按钮及其单击事件位于同一项目中的另一个窗口中,但访问main window.xaml的webview 2
控件时,以下操作不起作用
private async void btnPrint_Click(object sender, RoutedEventArgs e)
{
MainWindow mainWindow = new MainWindow();
await mainWindow.webView.CoreWebView2.ExecuteScriptAsync("window.print();");
}
AnotherWindow.xaml.cs
中的调试模式在下面显示CoreWebView2
不为空(因此引发错误:未设置对象引用):
您需要初始化CoreWebView2,如中所述:
创建时,控件的CoreWebView2属性将为null。这
因为创建CoreWebView2是一项昂贵的操作
包括启动边缘浏览器进程等。有两个
创建CoreWebView2的方法:1)调用
确保重新编写WebView2Async方法。这被称为显式
初始化。2) 设置源属性(可以从
例如,标记)
从第二个问题开始,您不能使用Source属性提供文档的HTML。您需要调用EnsureCreWebView2Async,等待其完成,然后在CoreWebView2上调用NavigateToString:
await webView.EnsureCoreWebView2Async(null);
webView.CoreWebView2.NavigateToString(htmlString);
它显然还没有初始化。线索可能出现在您的错误消息中:。。。调用EnsureCrewebView2Async或先设置Source属性。@Clemens如何设置HTML字符串的Source属性。你知道吗?
await webView.EnsureCoreWebView2Async(null);
webView.CoreWebView2.NavigateToString(htmlString);