文章目录

  • 1、简介
    • 1.1 WPF简介
    • 1.2 WPF 体系结构
    • 1.3 WPF入门开发
  • 2、WebBrowser
    • 2.1 WebBrowser特点
    • 2.2 WebBrowser常用的属性、方法和事件
    • 2.3 入门例子
    • 2.4 echarts例子
  • 3、WebView2
    • 3.1 WebView2简介
    • 3.2 WebView2接口
    • 3.3 入门例子
  • 4、CefSharp
    • 4.1 CefSharp简介
    • 4.2 CefSharp安装
    • 4.3 入门例子
  • 结语

1、简介

使用 Windows Presentation Foundation (WPF),你可以创建适用于 Windows 且具有非凡视觉效果的桌面客户端应用程序。

1.1 WPF简介

WPF 的核心是一个与分辨率无关且基于矢量的呈现引擎,旨在充分利用现代图形硬件。 WPF 通过一套完善的应用程序开发功能对该核心进行了扩展,这些功能包括可扩展应用程序标记语言 (XAML)、控件、数据绑定、布局、二维和三维图形、动画、样式、模板、文档、媒体、文本和版式。 WPF 属于 .NET,因此可以生成整合 .NET API 其他元素的应用程序。


Windows Presentation Foundation (WPF) 是一个可创建桌面客户端应用程序的 UI 框架。 WPF 开发平台支持广泛的应用开发功能,包括应用模型、资源、控件、图形、布局、数据绑定、文档和安全性。 它是 .NET Framework 的子集,因此,如果你曾经使用 ASP.NET 或 Windows 窗体通过 .NET Framework 构建应用程序,应该会熟悉此编程体验。 WPF 使用 Extensible Application Markup Language (XAML),为应用编程提供声明性模型。

WPF 为Windows Presentation Foundation的首字母缩写 ,中文译为“Windows呈现基础”,其原来代号为“Avalon”,因与“我佩服”拼音首字母组合一样,国内有人调侃地称之为“我佩服”。由 .NET Framework 3.0 开始引入,与 Windows Communication Foundation及 Windows Workflow Foundation并行为新一代 Windows操作系统以及 WinFX 的三个重大应用程序开发类库。

  • 对于WPF最重要的特色,矢量图的超强支持 。兼容支持2D绘图,比如矩形、自定义路径,位图等。文字显示的增强,XPS和消锯齿。三维强大的支持。包括3D控件及事件,与2D及视频合并打造更立 体效果。渐变、使用高精确的(ARGB)颜色,支持浮点类型的像素坐标。这些对GDI+远远不及的。
  • 灵活、易扩展的动画机制!.Net Framework 3.0类库提供了强大的基类,只需继承就可以实现自定义程序使用绘制。接口设计非常直观,完全面向对象的对象模型。使用对象描述语言XAML。使用开发工具的可视化编辑。
  • 您可以使用任何一种.Net编程语言(C#,VB NET等开发语言)进行开发。XAML主要针对界面的可视化控件描述,成生进会分析成.cs或.vb文件,并最后将编译为CLR中间运行语言。

1.2 WPF 体系结构

下图说明了 WPF 的主要组件。 关系图的红色部分(PresentationFramework、PresentationCore 和 milcore)是 WPF 的主要代码部分。 在这些组件中,只有一个是非托管组件 - milcore。 milcore 是以非托管代码编写的,目的是实现与 DirectX 的紧密集成。 WPF 中的所有显示均通过 DirectX 引擎完成,因此硬件和软件呈现都很高效。 WPF 还要求对内存和执行进行精细控制。 milcore 中的组合引擎受性能影响极大,需要放弃 CLR 的许多优点来提高性能。

1.3 WPF入门开发

  • (1)打开 Visual Studio。在“开始”窗口上,选择“创建新项目”。

  • (2)在“创建新项目”屏幕上,搜索“WPF”,选择“WPF 应用程序”,然后选择“下一步” 。

  • (2)打开App.xaml (C#)。
    此 XAML 文件定义 WPF 应用程序以及任意应用程序资源。 还可以使用此文件指定在应用程序启动时自动显示的 UI(在本例中是 MainWindow.xaml)。

在 C# 中如下所示:

  • (3)打开 MainWindow.xaml。
    此 XAML 文件是应用程序的主窗口,显示在页面中创建的内容。 Window 类定义窗口属性(例如标题、大小或图标),并处理事件(例如关闭或隐藏)。
  • (4)设计用户界面
    将三种类型的控件添加到此应用程序:一个 TextBlock 控件、两个 RadioButton 控件和一个 Button 控件。
    在“工具箱”中,找到相应控件。
  • (5)修改XAML 代码
    在 XAML 中将HelloButton 和 GoodbyeButton 的“内容”属性更新为 “Hello” 和 “Goodbye”。
  • (6)按钮添加事件
    用户选择单选按钮,再选择按钮Button之后,会显示一个消息框。 选择 Hello 将显示一个消息框,选择 Goodbye 将显示另一个。 若要创建此行为,请将代码添加到 MainWindow.xaml.cs 中的 Button_Click 事件。
using System.Windows;namespace WpfApp1
{/// <summary>/// MainWindow.xaml 的交互逻辑/// </summary>public partial class MainWindow : Window{public MainWindow(){InitializeComponent();}private void Button_Click(object sender, RoutedEventArgs e){if (HelloButton.IsChecked == true){MessageBox.Show("Hello.");}else if (GoodbyeButton.IsChecked == true){MessageBox.Show("Goodbye.");}}}
}

启动调试程序 (按“F5”)。 你现在应该可以看到应用程序的 MainWindow窗口。

  • (7)添加窗口背景
        <Grid.Background><ImageBrush ImageSource="piper-banner.jpg"/></Grid.Background>

添加代码位置如下:

图片资源的存放位置如下:

修改图片对象的属性:

将图片对象的属性的生成操作改为:Resource

再次启动调试程序 (按“F5”)。 你现在应该可以看到应用程序的 MainWindow窗口。

2、WebBrowser

2.1 WebBrowser特点

WebBrowser控件内部使用IE的引擎,因此使用WebBrowser我们必须安装IE浏览器。
WebBrowser使用的是IE内核,许多H5新特性都不支持,然后使用谷歌内核和火狐内核会使软件的体积增加至几十MB。

WebBrowser 控件为 WebBrowser ActiveX 控件提供了托管包装器。 托管包装器可在 Windows 窗体客户端应用程序中显示网页。 你可以使用 WebBrowser 控件在应用程序中复制 Internet Explorer Web 浏览功能,也可以禁用默认 Internet Explorer 功能并将该控件用作简单的 HTML 文档查看器。

WPF 带有一个随时可用的 WebBrowser控件,它允许您在应用程序中托管一个完整的 Web 浏览器。WebBrowser 控件实际上只是 Internet Explorer 的 ActiveX 版本的外壳,但由于它是 Windows 的集成部分,因此您的应用程序应该可以在所有 Windows 机器上运行,而无需安装其他组件。

2.2 WebBrowser常用的属性、方法和事件

The WebBrowser control provides the following capabilities:

  • Navigation: Source, Navigate, NavigateToStream, NavigateToString, and Refresh.
  • Navigation Lifetime: Navigating, Navigated, and LoadCompleted.
  • Navigation Journaling: CanGoBack, GoBack, CanGoForward, and GoForward.
  • WPF/HTML Interoperability: InvokeScript and ObjectForScripting, and Document.

2.3 入门例子

  • (1)方法1:直接在XAML代码中使用webBrowser控件:

  • (2)方法2:通过工具箱的webBrowser控件添加实现:
    打开工具箱窗口:

    找到webBrowser控件:

    将webBrowser控件拖拽到窗口MainWindow上:

    修改webBrowser控件的网址属性Source:

<WebBrowser HorizontalAlignment="Left" Height="207" Margin="71,87,0,0" VerticalAlignment="Top" Width="629" Source="https://cn.bing.com/search?q=java"/>

直接编译运行:

添加一个文本框和一个按钮,进行网址浏览切换。
修改XAML代码如下:

<StackPanel><StackPanel Orientation="Horizontal"><TextBox x:Name="addressTextBox" Width="200" /><Button Click="goNavigateButton_Click">Go</Button></StackPanel><WebBrowser x:Name="webBrowser1" HorizontalAlignment="Left" Height="339" Margin="10,10,0,-0.333" VerticalAlignment="Top" Width="773" Source="https://cn.bing.com/search?q=python"/>
</StackPanel>

修改按钮的鼠标点击事件:

private void goNavigateButton_Click(object sender, RoutedEventArgs e)
{// Get URI to navigate toUri uri = new Uri(this.addressTextBox.Text, UriKind.RelativeOrAbsolute);// Only absolute URIs can be navigated toif (!uri.IsAbsoluteUri){MessageBox.Show("The Address URI must be absolute. For example, 'http://www.microsoft.com'");return;}// Navigate to the desired URL by calling the .Navigate methodthis.webBrowser1.Navigate(uri);
}

2.4 echarts例子

  • (1)从echarts官网下载echarts.js

  • (2)编写网页文件index.html:

<!DOCTYPE html>
<html lang="zh-cn" xmlns="http://www.w3.org/1999/xhtml">
<head><meta charset="utf-8" http-equiv="X-UA-Compatible" content="IE=5,6,7,8,9,10,11, chrome=1" /><title>ECharts</title>
</head><body><h1>爱看书的小沐测试</h1><div id="main" style="width:1000px;height:300px;" /><script src="echarts.js"></script><script>myChart = echarts.init(document.getElementById('main'));option = {xAxis: {type: 'category',data: ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun']},yAxis: {type: 'value'},series: [{data: [820, 932, 901, 934, 1290, 1330, 1320],type: 'line'}]};myChart.setOption(option);</script>
</body>
</html>
  • (3)在上面wpf入门例子的基础上,MainWindow.xaml.cs添加代码:
using System;
using System.Windows;
using System.IO;namespace WpfApp1
{/// <summary>/// MainWindow.xaml 的交互逻辑/// </summary>public partial class MainWindow : Window{public MainWindow(){InitializeComponent();this.webBrowser1.Navigate(new Uri(Directory.GetCurrentDirectory() + "/index.html"));}}
}
  • (4)将echarts.js和index.html文件放在工程的输出文件夹下:
  • (5)运行程序,如下:

    当然WebBrowser初始的过程,也可以写在其他地方。在Windows标记中我们需要一个Load事件用于让WebBrowser跳转到相应的页面。
<Window x:Class="WpfApp1.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:WpfApp1"mc:Ignorable="d"Title="MainWindow" Height="454.837" Width="1009.365" Loaded="Window_Loaded">

再在MainWindow.xaml.cs添加代码:

private void Window_Loaded(object sender, RoutedEventArgs e)
{this.webBrowser1.Navigate(new Uri(Directory.GetCurrentDirectory() + "/index.html"));
}

再增加一个例子,修改index.html,如下:

<!DOCTYPE html><html lang="zh-cn" xmlns="http://www.w3.org/1999/xhtml">
<head><meta charset="utf-8" http-equiv="X-UA-Compatible" content="IE=5,6,7,8,9,10,11, chrome=1" /><title>ECharts</title>
</head><body><h1>爱看书的小沐测试</h1><div id="main" style="width:1000px;height:300px;" /><script src="echarts.js"></script><script>myChart = echarts.init(document.getElementById('main'));myChart.setOption({series: [{name: '访问来源',type: 'pie',    // 设置图表类型为饼图radius: '55%',  // 饼图的半径,外半径为可视区尺寸(容器高宽中较小一项)的 55% 长度。data: [          // 数据数组,name 为数据项名称,value 为数据项值{ value: 235, name: '视频广告' },{ value: 274, name: '联盟广告' },{ value: 310, name: '邮件营销' },{ value: 335, name: '直接访问' },{ value: 400, name: '搜索引擎' }]}]})</script>
</body>
</html>

3、WebView2

3.1 WebView2简介

Microsoft Edge WebView2 控件允许在本机应用中嵌入 web 技术(HTML、CSS 以及 JavaScript)。 WebView2 控件使用 Microsoft Edge 作为绘制引擎,以在本机应用中显示 web 内容。

  • Web 生态系统和技能集。 利用 web 生态系统中存在的整个 web 平台、库、工具以及人才。
  • 快速创新。 Web 开发允许快速部署和迭代。
  • Windows 10和 11 支持。 支持跨Windows 10和Windows 11提供一致的用户体验。
  • 本机功能。 访问完整的本机 API 集。
  • 代码共享。 向代码库添加 web 代码可以增加跨多个平台的重用。
  • Microsoft 支持。 Microsoft 在受支持的平台上提供支持并添加新功能请求。
  • 常青分布。 依赖带有定期平台更新和安全修补的最新版 Chromium。
  • 已修复版本分布。 也可以在应用中打包特定版本的 Chromium 位。
  • 增量采用。 逐步将 web 组件添加到应用。

3.2 WebView2接口

CoreWebView2Environment (或等效接口的 、 CoreWebView2Controller和 CoreWebView2 类) 协同工作,以便应用可以托管 WebView2 浏览器控件并访问其浏览器功能。 这三个大类公开了各种 API,主机应用可以访问这些 API,从而为用户提供许多与浏览器相关的功能类别。

  • 类 CoreWebView2Environment 表示一组 WebView2 控件,这些控件共享相同的 WebView2 浏览器进程、用户数据文件夹和呈现器进程。 在此类CoreWebView2Environment中,将创建 和 CoreWebView2 实例对CoreWebView2Controller。
  • 类 CoreWebView2Controller 负责与托管相关的功能,例如窗口焦点、可见性、大小和输入,应用在其中托管 WebView2 控件。
  • 类 CoreWebView2 适用于 WebView2 控件的特定于 Web 的部分,包括网络、导航、脚本以及分析和呈现 HTML。

3.3 入门例子

使用 WPF 应用程序或 WPF 应用 (.NET Framework) 项目模板创建 WPF 应用,然后为项目安装 WebView2 SDK 以添加 WebView2。

单击标题为 WPF 应用 (.NET Framework) 的项目模板,并在客户端应用程序Windows Presentation Foundation说明文本:

安装Microsoft.Web.WebView2程序包

Install-Package Microsoft.Web.WebView2

当前工程文件夹里增加了如下文件:

当前工程的引用中增加了如下:

添加名字空间:

xmlns:wv2="clr-namespace:Microsoft.Web.WebView2.Wpf;assembly=Microsoft.Web.WebView2.Wpf"

添加控件:

<wv2:WebView2  Name="webView" Source="https://tianfang.cnblogs.com"/>


文件MainWindow.xaml.cs添加代码:

using Microsoft.Web.WebView2.Core;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;namespace WpfWebView2
{/// <summary>/// MainWindow.xaml 的交互逻辑/// </summary>public partial class MainWindow : Window{public MainWindow(){InitializeComponent();}//WebView2 webView21 = new WebView2();private async void MainWindow_OnLoaded(object sender, EventArgs e){// webView21.Dock = DockStyle.Fill;// this.Controls.Add(webView21);webView21.Source = new Uri("http://www.baidu.com");await webView21.EnsureCoreWebView2Async();webView21.CoreWebView2.NewWindowRequested += CoreWebView2_NewWindowRequested;}private void CoreWebView2_NewWindowRequested(object sender,CoreWebView2NewWindowRequestedEventArgs e){e.NewWindow = (CoreWebView2)sender;//e.Handled = true;}}
}

运行之后:

4、CefSharp

4.1 CefSharp简介

一个开源的浏览器包CefSharp,它支持Winform和WPF,内嵌了Chrome浏览器组件并且有比较详细的说明文档。

CefSharp允许您在.NET应用程序中嵌入Chromium。它是围绕Marshall A. Greenblatt的Chromium Embedded Framework(CEF)的轻量级.NET包装器。大约 30% 的绑定是用 C++/CLI 编写的,这里的大部分代码都是 C#。它可以从 C# 或 VB 或任何其他 CLR 语言使用。CefSharp 提供 WPF 和 WinForms Web 浏览器控件实现。

4.2 CefSharp安装

通过Nuget安装,右击项目 -> 管理Nuget程序包 -> 在打开的界面中搜索CefSharp,依次安装 CefSharp.Common和 CefSharp.Wpf ,至于 cef.redist.x64和 cef.redist.x86会自动安装。



使用时可以直接在xaml文件中直接添加ChromiumWebBrowser控件,不过ChromiumWebBrowser控件特别消耗内存,所以代码里动态添加也是一种不错的选择。

4.3 入门例子

MainWindow.xaml中修改如下:

<Window x:Class="WpfCefSharp.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:WpfCefSharp"xmlns:wpf="clr-namespace:CefSharp.Wpf;assembly=CefSharp.Wpf"mc:Ignorable="d"Title="MainWindow" Height="450" Width="800"><Grid x:Name="ctrlBrowerGrid"><wpf:ChromiumWebBrowser x:Name="myWebCtl"/></Grid>
</Window>

MainWindow.xaml.cs文件中操作控件访问网址:

using CefSharp;
using System.Windows;//Predefined type 'System.ValueTuple´2´ is not defined or imported
//如果要定位到.NET 4.6.1或更低版本或.NET Core,则需要安装NuGet软件包System.ValueTuple:
//Install-Package “System.ValueTuple”namespace WpfCefSharp
{/// <summary>/// MainWindow.xaml 的交互逻辑/// </summary>public partial class MainWindow : Window{public MainWindow(){InitializeComponent();////静态添加和操作控件:myWebCtl.Load("www.baidu.com");}}
}

运行如下:

结语

如果您觉得该方法或代码有一点点用处,可以给作者点个赞,或打赏杯咖啡;╮( ̄▽ ̄)╭
如果您感觉方法或代码不咋地//(ㄒoㄒ)//,就在评论处留言,作者继续改进;o_O???
如果您需要相关功能的代码定制化开发,可以留言私信作者;(✿◡‿◡)
感谢各位大佬童鞋们的支持!( ´ ▽´ )ノ ( ´ ▽´)っ!!!

【小沐学C#】WPF中嵌入web网页控件(WebBrowser、WebView2、CefSharp)相关推荐

  1. Qt中嵌入web网页的几种实现方式

    1.背景 Web网页的界面交互相比较Qt客户端而言有着比较大的优势:更加的多样化和更高的使用便捷性使得我们即使在客户端中也可以考虑将web网页嵌入到客户端的界面当中.如此便能将web的优势和客户端进行 ...

  2. WindowsXamlHost:在 WPF 中使用 UWP 的控件(Windows Community Toolkit)

    原文 WindowsXamlHost:在 WPF 中使用 UWP 的控件(Windows Community Toolkit) Windows Community Toolkit 再次更新到 5.0. ...

  3. ASP.NET中制作WEB统计图控件的捷径

    一.    引言 在许多B/S结构的信息管理软件中,利用在线统计图帮助用户观察.分析各种各样的数据,要比纯粹依靠统计表格更直观,更形象.然而,与窗体类程序相比,在WEB中实现统计图功能存在着一些差别, ...

  4. 小D学blend-----如何创建自定义的Tooltip控件

    运行环境:blend 4.0或者blend 3.0 +silverlight 3.0(其实我相信步骤应该是差不多的) 语言:C# Tooltip类:它是表示一个长方形的小弹出窗口,该窗口在用户将指针悬 ...

  5. 在asp.net中为Web用户控件添加属性和事件

    在90年代初,Microsoft为Web程序员提供的 Active Server Pages(ASP)革命性地改变了Web的编程.它可以利用十分易用的模型在Web服务器上动态生成HTML,并且很容易的 ...

  6. WPF 中如何使用第三方控件 ,可以使用WindowsFormsHost 类

    允许在 WPF 页面上承载 Windows Forms控件的元素. 命名空间:   System.Windows.Forms.Integration 程序集:   WindowsFormsIntegr ...

  7. Asp.net中使用WEB编辑控件FCKEditor

    先要下载两个文件: FCKEditor(JS文件),FCKEdito.net(COM+组件 DLL文件) 官方网站:http://sourceforge.net FCKEdiotr的安装与配置: 把F ...

  8. VS编程,WPF中,通过telerik控件创建颜色选择器,颜色拾取器,调色板的一种方法

     这里展示使用telerik控件时,调用颜色调色板,颜色选择器,颜色拾取器的一种方法 1.增加引用 2.前台定义引用 xmlns:telerik="http://schemas.teleri ...

  9. 【小沐学Python】Python实现Web服务器(Ubuntu下调试Flask)

最新文章

  1. 二、python小功能记录——监听鼠标事件
  2. python软件怎么用-Python如何创建应用程序
  3. 使用 VideoToolbox 探索低延迟视频编码 | WWDC 演讲实录
  4. mysql中获取时间的年月日_关于苹果ios中的Date()获取时间NaN的问题
  5. 文件的输入和输出:流和缓冲区的概念和文件操作函数总结
  6. core api其他电脑不能访问接口_第 12 篇:加缓存为接口提速
  7. Google 如何设计与构建超大规模的软件系统
  8. C# WinForm开发系列 - Thread/Delegate/Event
  9. 2020.11.16-使用Arduino测速
  10. 我的游戏测试面试过程
  11. 计算机复制方法有,如何在电脑上复制粘贴文字(包括快捷键),来学习吧
  12. 计算机函数sumif怎么用,怎么用sumif函数求和
  13. “use strict” 严格模式使用
  14. java得到几天前的日期
  15. 2014年优秀动画片推荐:马来西亚动画片《Ribbit》
  16. 蓝牙耳机牌子排行榜2020:性能最强的蓝牙耳机排名前十
  17. ⑪(面试篇 2/3)、《史上最全iOS八股文面试题》2022年,金三银四我为你准备了,iOS《1000条》笔试题以及面试题(包含答案)。带面试你过关斩将,(赶紧过来背iOS八股文)
  18. CRI HITFM 88.7的网络电台
  19. 插件加载导致outlook崩溃
  20. Fortran笔记,指针-Part1

热门文章

  1. 「米聊」突然复活 | 附下载地址!
  2. 好佳居窗帘十大品牌 窗帘怎么搭配不同的窗户?
  3. Linux替换内容出现E488: Trailing characters
  4. php move函数,PHP中move_uploaded_file() 函数详解
  5. 虚拟机的资源分配策略
  6. linux需要关注的日志文件,如何更好地使用Linux日志
  7. 一般而言计算机软件是指(,2012年计算机一级考试模拟试题及参考答案(20)
  8. 台式计算机如何设置三道密码,电脑怎么设置三道开机密码
  9. java在linux下新建文件夹
  10. vmware安装windows server2003系统摁F8不管用