如何在 WPF 中初始化 WebView2?
How can I initialize the WebView2 in WPF?
我正在尝试在 WPF 应用程序中使用 WebView2。我也在 docs and in 中读到,我应该调用 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 线程上,但是当我在另一个线程上调用这个方法时发生了同样的事情。
有人遇到过这种行为吗?有什么想法吗?
要手动显示 WebView2
,您必须将其添加到表单的 Controls
集合中。
当您将 WebView2 拖放到窗体上时,设计器会自动执行此操作。
只需致电:
Controls.Add(webView)
await webView.EnsureCoreWebView2Async(null);
现在您应该可以显示您的 html。
更新:
您仍然可以在表单上放置 WebView2
,如果您愿意,只需 不要设置 Source
属性。
然后您可以使用设计器分配事件处理程序,并在 Initialized
事件中调用:
webView.NavigateToString(myHtml);
就像你现在做的那样。
如果您需要转到特定的 URI,我必须执行以下调用。
如前所述,不要在 XAML 中设置 Source
属性。
请注意,wv
是我的 WevView2
的 Name
。重要的是您仍然需要等待加载 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");
}
我正在尝试在 WPF 应用程序中使用 WebView2。我也在 docs and in 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 线程上,但是当我在另一个线程上调用这个方法时发生了同样的事情。
有人遇到过这种行为吗?有什么想法吗?
要手动显示 WebView2
,您必须将其添加到表单的 Controls
集合中。
当您将 WebView2 拖放到窗体上时,设计器会自动执行此操作。
只需致电:
Controls.Add(webView)
await webView.EnsureCoreWebView2Async(null);
现在您应该可以显示您的 html。
更新:
您仍然可以在表单上放置 WebView2
,如果您愿意,只需 不要设置 Source
属性。
然后您可以使用设计器分配事件处理程序,并在 Initialized
事件中调用:
webView.NavigateToString(myHtml);
就像你现在做的那样。
如果您需要转到特定的 URI,我必须执行以下调用。
如前所述,不要在 XAML 中设置 Source
属性。
请注意,wv
是我的 WevView2
的 Name
。重要的是您仍然需要等待加载 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");
}