WPF WebView2 从不在视图模型中初始化 returns
WPF WebView2 Initialization in viewmodel never returns
在我的 wpf 应用程序中,我尝试显示用于登录的 webView2,即使当我导航到该视图并开始初始化时,也没有任何反应。我已经尝试了很多在互联网上找到的选项和解决方案,这些选项和解决方案对其他人有用,但没有任何帮助。
代码:
private WebView2 m_webView21;
public WebView2 WebView21 { get => m_webView21; set => SetProperty(ref m_webView21, value); }
protected async Task<WebView2> CreateBrowserAndLoadUrlAsync(string url)
{
webView21 = new WebView2();
webView21.CoreWebView2InitializationCompleted += WebView21_CoreWebView2InitializationCompleted;
Debug.WriteLine("InitializeAsync");
await webView21.EnsureCoreWebView2Async();
Debug.WriteLine("WebView2 Runtime version: " + webView21.CoreWebView2.Environment.BrowserVersionString);
SetBrowserHostVisibility(Visibility.Visible);
if (webView21 != null && webView21.CoreWebView2 != null)
{
webView21.CoreWebView2.Navigate(url);
}
return webView21;
}
private void WebView21_CoreWebView2InitializationCompleted(object sender, CoreWebView2InitializationCompletedEventArgs e)
{
webView21.Loaded += Browser_FrameLoadEnd;
webView21.Initialized += Browser_InitializedChanged;
}
--Xaml Code--
<Grid Background="Transparent">
<wv2:WebView2 Visibility="Visible" Source="{Binding WebView21.Source.AbsoluteUri, Mode=OneWay}"/>
</Grid>
这是我在视图模型中从 OnNavigatedTo() 调用的第一件事。 EnsureCoreWebViewAsync() 的一切正常,因为它应该解除它 - 从这个函数它永远不会 returns - 什么都没有发生。
当我不初始化 webview2 并将源设置为 uri 时,一切正常。但是没有事件或任何东西被触发(例如 NavigationCompleted、SourceChanged 等),我需要这些事件。
我安装了正确的运行时,当然我还安装了 WebView2 插件。也尝试了不同的环境,但没有任何帮助。
所以实际的问题是,是否可以从 Viewmodel 初始化 WebView2?
我找到了解决方案。我不得不在我的 xaml 中使用一个占位符,后来在我的 Viewmodel 中初始化了 webView2。
只需更改问题中的 xaml 代码,它应该可以正常工作
<ContentControl Content="{Binding WebView21, Mode=OneWay}" />
感谢所有有用的评论:))
在我的 wpf 应用程序中,我尝试显示用于登录的 webView2,即使当我导航到该视图并开始初始化时,也没有任何反应。我已经尝试了很多在互联网上找到的选项和解决方案,这些选项和解决方案对其他人有用,但没有任何帮助。
代码:
private WebView2 m_webView21;
public WebView2 WebView21 { get => m_webView21; set => SetProperty(ref m_webView21, value); }
protected async Task<WebView2> CreateBrowserAndLoadUrlAsync(string url)
{
webView21 = new WebView2();
webView21.CoreWebView2InitializationCompleted += WebView21_CoreWebView2InitializationCompleted;
Debug.WriteLine("InitializeAsync");
await webView21.EnsureCoreWebView2Async();
Debug.WriteLine("WebView2 Runtime version: " + webView21.CoreWebView2.Environment.BrowserVersionString);
SetBrowserHostVisibility(Visibility.Visible);
if (webView21 != null && webView21.CoreWebView2 != null)
{
webView21.CoreWebView2.Navigate(url);
}
return webView21;
}
private void WebView21_CoreWebView2InitializationCompleted(object sender, CoreWebView2InitializationCompletedEventArgs e)
{
webView21.Loaded += Browser_FrameLoadEnd;
webView21.Initialized += Browser_InitializedChanged;
}
--Xaml Code--
<Grid Background="Transparent">
<wv2:WebView2 Visibility="Visible" Source="{Binding WebView21.Source.AbsoluteUri, Mode=OneWay}"/>
</Grid>
这是我在视图模型中从 OnNavigatedTo() 调用的第一件事。 EnsureCoreWebViewAsync() 的一切正常,因为它应该解除它 - 从这个函数它永远不会 returns - 什么都没有发生。
当我不初始化 webview2 并将源设置为 uri 时,一切正常。但是没有事件或任何东西被触发(例如 NavigationCompleted、SourceChanged 等),我需要这些事件。
我安装了正确的运行时,当然我还安装了 WebView2 插件。也尝试了不同的环境,但没有任何帮助。
所以实际的问题是,是否可以从 Viewmodel 初始化 WebView2?
我找到了解决方案。我不得不在我的 xaml 中使用一个占位符,后来在我的 Viewmodel 中初始化了 webView2。
只需更改问题中的 xaml 代码,它应该可以正常工作
<ContentControl Content="{Binding WebView21, Mode=OneWay}" />
感谢所有有用的评论:))