Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 从同一项目中的另一个XAML窗口访问CoreWebView2时,它为空_C#_Wpf_Xaml_Webview2 - Fatal编程技术网

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);