繁体   English   中英

如何在 WPF 中初始化 WebView2?

[英]How can I initialize the WebView2 in WPF?

我正在尝试在 WPF 应用程序中使用 WebView2。 我也在文档其他帖子中读到,我应该调用EnsureCoreWebView2Async()或设置Source属性以初始化 WebView。 如果我设置Source ,它会正确加载 web 页面,但我不能这样做,因为我在 memory 中有 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 线程上运行此代码,但是当我在另一个线程上调用此方法时发生了同样的事情。

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

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

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

只需调用:

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

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

更新

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

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

webView.NavigateToString(myHtml);

就像你现在做的那样。

如果需要 go 到特定的 URI,我只好进行以下调用。

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

请注意, wv是我的WevView2Name 重要的部分是您仍然需要等待加载 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");
    }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM