5

我正在尝试在 WPF 应用程序中使用 WebView2。我也在文档其他帖子中读到,我应该调用EnsureCoreWebView2Async()或设置Source属性以初始化 WebView。如果我设置Source,它会正确加载网页,但我不能这样做,因为我在内存中有 html 内容(并且不允许写入磁盘)。

于是我尝试调用初始化方法:

var webView = new WebView2();

webView.NavigationCompleted += Navigation_Completed;
webView.Initialized += new EventHandler((object sender, EventArgs e) => { 
    webView.NavigateToString(myHtml);
});

await webView.EnsureCoreWebView2Async(null);

该方法阻止了此代码的运行EnsureCoreWebView2Async()。我什至可以等待一分钟,但什么也没发生,它只是卡在初始化中。没有例外,没有错误信息。我在 UI 线程上运行此代码,但是当我在另一个线程上调用此方法时发生了同样的事情。

有没有人经历过这种行为?有任何想法吗?

4

2 回答 2

3

WebView2手动显示,您必须将其添加到Controls表单的集合中。

当您将 WebView2 拖放到表单上时,设计器会自动执行此操作。

只需调用:

Controls.Add(webView)
await webView.EnsureCoreWebView2Async(null);

现在你应该可以显示你的 html 了。

更新

如果您愿意,您仍然可以将WebView2放在表单上,​​只是不要设置该Source属性。

然后,您可以使用设计器分配事件处理程序,并在Initialized您调用的事件中:

webView.NavigateToString(myHtml);

就像你现在做的那样。

于 2020-12-07T05:41:29.830 回答
0

如果您需要转到特定的 URI,我必须执行以下调用。

如前所述,不要Source在 XAML 中设置属性。

请注意,这wvName我的WevView2. 重要的部分是您仍然需要等待加载 CoreWebView2。现在您可以将任何 URI 字符串替换为“https://www.microsoft.com”

    private async void wv_Initialized(object sender, EventArgs e)
    {
       await wv.EnsureCoreWebView2Async(null);
       wv.CoreWebView2.Navigate("https://www.microsoft.com");
    }
于 2021-02-05T00:28:25.607 回答