如何在 WPF 中初始化 WebView2?

Att*_*ász 7 c# wpf webview2

我正在尝试在 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);
Run Code Online (Sandbox Code Playgroud)

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

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

Pou*_*Bak 4

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

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

只需致电:

Controls.Add(webView)
await webView.EnsureCoreWebView2Async(null);
Run Code Online (Sandbox Code Playgroud)

现在您应该能够显示您的 html 了。

更新

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

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

webView.NavigateToString(myHtml);
Run Code Online (Sandbox Code Playgroud)

就像你现在一样。