在WPF中使用WebView2控件作为浏览器有以下优势:
-
现代浏览器引擎:
WebView2基于Microsoft Edge(Chromium内核)浏览器,因此它可以利用最新的Web标准和功能。 -
跨平台支持:
WebView2支持多种操作系统和框架,包括Windows 7、8、10以及.NET Framework、.NET Core、Win32 C/C++、.NET 5、.NET 6和WinUI 2.0/3.0。 -
无缝集成:
WebView2可以轻松地嵌入到WPF应用程序中,提供一种混合本地应用和Web技术的开发方式,使得界面设计更加灵活。 -
代码复用:
已有的Web前端代码可以被重用在WebView2中,减少了开发时间和工作量。 -
本地API访问:
WebView2允许调用完整的本地应用程序编程接口(API),使得Web内容能够与宿主操作系统进行深度交互。 -
更新和安全:
WebView2依赖于定期更新和修复漏洞的Chromium内核,保证了浏览器组件的安全性和稳定性。 -
部署选项:
开发者可以选择使用带内核更新的部署或者固定版本内核部署,以适应不同的应用需求和更新策略。 -
丰富的API支持:
WebView2提供了数百个API,涵盖了从增强本机平台功能到修改浏览器体验的各种功能。 -
微软官方支持:
WebView2由微软持续更新和维护,具有正式的GA(General Availability)版本,为开发者提供了可靠的技术支持。 -
增强的用户体验:
使用WebView2可以在桌面应用程序中提供类似Web的用户体验,同时还能根据需要定制和扩展浏览器功能。
通过这些优势,WPF中的WebView2控件使得开发者能够利用成熟的Web技术构建和维护桌面应用程序,同时享受本地应用的性能和功能。这不仅简化了开发过程,还为用户提供了一种更加一致和现代化的交互体验。
<Window x:Class="WPF_WebView2.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:WPF_WebView2"
xmlns:wv2="clr-namespace:Microsoft.Web.WebView2.Wpf;assembly=Microsoft.Web.WebView2.Wpf"
mc:Ignorable="d"
WindowStartupLocation="CenterScreen"
Title="WPF_WebView2" Height="450" Width="800">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="30"/>
<RowDefinition Height="*" />
</Grid.RowDefinitions>
<Grid Grid.Row="0">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="70"/>
</Grid.ColumnDefinitions>
<Grid Grid.Column="0">
<TextBox x:Name="inputUrl" VerticalContentAlignment="Center" KeyDown="inputUrl_KeyDown"/>
</Grid>
<StackPanel Grid.Column="2" Orientation="Horizontal" HorizontalAlignment="Left" Margin="5 0 0 0">
<Button Content="GO" Width="60" Height="30" Click="Button_Click"/>
</StackPanel>
</Grid>
<Grid Grid.Row="1">
<wv2:WebView2 Name="webView" Source="https://www.baidu.com/" />
</Grid>
</Grid>
</Window>
private void Button_Click(object sender, RoutedEventArgs e)
{
goUrl();
}
private void inputUrl_KeyDown(object sender, KeyEventArgs e)
{
if (e.Key == Key.Return)
{
goUrl();
}
}
private void goUrl() {
string url = this.inputUrl.Text.Trim();
try
{
if (url.Equals(""))
{
this.webView.Source = new Uri("about:blank");
}
else
{
url = url.IndexOf("http") > -1 ? url : "http://" + url;
webView.Source = new Uri(url);
}
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
}