【WPF】使用CefSharp嵌入HTML网页
需求:WPF项目中要做用户的商铺主页,由于考虑到每个商家的主页布局各不相同,不能用XAML写死布局。最好的办法是WPF这边XAML写好一个容器,用户使用HTML可视化编辑器(比如这个)来准备好网页,输出HTML网页文件,再将网页嵌入WPF中。
选择插件:Webkit.Net只支持32位的,已经好多年没再更新了,试过后不太好用。最后搜到CefSharp这个项目,下载后运行试用,觉得符合需求,且自带的WPF的Demo这个和这个容易上手。
坑点:因为CefSharp不支持AnyCPU,需要VS中为项目编译平台单独指定x86和x64,否则会发现引入的相关DLL都是黄色叹号不可用的,且编译不通过要求必须指定x86或x64平台。根据报错提示参考这里操作后也不能解决这个问题,最后是照着教程设置才可用的。从Nuget引入CefSharp后,还有一个bug是要重启VS才能开始使用该插件。这些小问题都在教程(https://www.codeproject.com/Articles/881315/Display-HTML-in-WPF-and-CefSharp-Tutorial-Part)中有提及,需要小心。
从Nuget中安装好后,弹出的文档有提到上面的问题。

最简单的例子:
<Window x:Class="CefSharpTest.Presentation.Views.ShellWindow"
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:vm="clr-namespace:CefSharpTest.Applications.ViewModels"
xmlns:wpf="clr-namespace:CefSharp.Wpf;assembly=CefSharp.Wpf"
xmlns:cef="clr-namespace:CefSharp;assembly=CefSharp.Core"
mc:Ignorable="d" Title="{Binding Title}" Icon="{StaticResource ApplicationIcon}" Width="800" Height="600"> <DockPanel>
<Grid>
<wpf:ChromiumWebBrowser x:Name="Browser" Address="http://www.baidu.com"/>
</Grid>
</DockPanel>
</Window>
注意使用xmlns:wpf="clr-namespace:CefSharp.Wpf;assembly=CefSharp.Wpf"来引入浏览器控件所在的程序集。
运行效果:

想要支持AnyCPU怎么办?
CefSharp ver51.0.0开始支持AnyCPU
- Github上对该问题的讨论:https://github.com/cefsharp/CefSharp/issues/1714
- 参考Demo:https://github.com/cefsharp/CefSharp.MinimalExample/tree/demo/anycpu
- 其他资料:https://ourcodeworld.com/articles/read/173/how-to-use-cefsharp-chromium-embedded-framework-csharp-in-a-winforms-application
实践发现第3点中的做法有问题!会导致项目AnyCPU运行即报错,请完全不要参照第3点中的做法!
从代码看,Demo中的做法是在App入口用AppDomain.CurrentDomain.AssemblyResolve += Resolver给当前应用程序域注册了一个程序集解析失败时发生的回调,在该回调中通过判断当前程序的运行环境来为程序集动态地加载x86或x64的三个CefSharp相关DLL文件(CefSharp.dll、CefSharp.Core.dll、CefSharp.Wpf.dll),然后用Cef.Initialize()初始化CefSharp.BrowserSubprocess.exe。
其他问题
关闭WPF应用时程序无法退出?
- 在调用Environment.Exit(0)或Application.Current.Shutdown()退出程序之前,先调用Cef.Shutdown()让CefSharp释放资源。参考https://github.com/cefsharp/CefSharp/issues/990
如何屏蔽浏览器右键菜单?
【WPF】使用CefSharp嵌入HTML网页的更多相关文章
- WPF使用CefSharp嵌入网页
1.点击项目应用下的管理NuGet程序包 2.在浏览中输入cefsharp-->查找 CefSharp.Wpf-->点击安装,等待安装完成 3.如果遇到一下问题将解决方案和项目都改成64位 ...
- 在WPF中使用CefSharp嵌入浏览器
日常开发中,我们需要将一些Web页面嵌入到桌面客户端软件中.下面我们使用CefSharp嵌入浏览器来实现. 首先先介绍一下CefSharp嵌入式浏览器,它是基于Google浏览器的一个组件,我们可以在 ...
- 在WPF中使用CefSharp嵌入浏览器(转)
在WPF中使用CefSharp嵌入浏览器 日常开发中,我们需要将一些Web页面嵌入到桌面客户端软件中.下面我们使用CefSharp嵌入浏览器来实现. 首先先介绍一下CefSharp嵌入式浏览器,它 ...
- WinForm嵌入Web网页的解决方案
企业级信息化系统绝大部分采用BS架构实现,如门户网站.OA系统.电商网站等,通过浏览器输入Web网址即可访问,对于使用者来说非常便捷,对于开发维护者来说也非常方便,程序维护只需更新服务器即可,使用者无 ...
- WPF应用程序内嵌网页
原文:WPF应用程序内嵌网页 版权声明:本文为博主原创文章,转载请注明出处. https://blog.csdn.net/shaynerain/article/details/78160984 WPF ...
- C# 使用CefSharp嵌入网站
最近有一个项目,需要在winform中嵌套web网站,从网上了解到几个相关的组件有winform自带的IE内核的WebBrowser,有第三方组件谷歌内核的webkit.cefsharp.chromi ...
- 博客代码:iframe—网页中嵌入其他网页
iframe 是一个可以把另外一个网页嵌入到一个网页里的代码,非常有用.对于一个内容不错的网页,要方便地把它搬到自己的博客里,用这个代码最合适.而对于在新浪博客里不支持的一些网页效果和代码,可先把他们 ...
- WPF 将DLL嵌入EXE文件(安装包)
网上很多例子,各种套路,就是没有测试过. WPF 将DLL嵌入EXE文件的套路是这样的 1.将要引用的dll源文件添加到wpf 项目中,dll 的属性->生成操作为[嵌入的资源]. 2.监听 ...
- Display HTML in WPF and CefSharp
https://www.codeproject.com/articles/881315/display-html-in-wpf-and-cefsharp-tutorial-part Download ...
随机推荐
- 安装Eclipse Maven插件的方法
安装IDE Plugins的方法有很多.其一:在线安装,通过Help-->Install New Software的方式,输入HTTP地址来安装,简单易操作,但是也优缺点,就是下载速度慢,或者有 ...
- .net core下直接执行SQL语句并生成DataTable
.net core可以执行SQL语句,但是只能生成强类型的返回结果.例如var blogs = context.Blogs.FromSql("SELECT * FROM dbo.Blogs& ...
- C++项目參考解答:求Fibonacci数列
[项目:求Fibonacci数列] Fibonacci数列在计算科学.经济学等领域中广泛使用,其特点是:第一.二个数是1,从第3个数開始,每一个数是其前两个数之和.据此,这个数列为:1 1 2 3 5 ...
- mysql 5.5数据库主从配置步骤详解
上次给大家介绍了mysql 5.1主从搭建配置教程,这次我们来实现mysql 5.5的主从复制,其实大体上配置是差不多的,只有点细微的差别. 系统:centos 5.x 需要的软件包:mysql-5. ...
- python md5 问题(TypeError: Unicode-objects must be encoded before hashing)
import hashlib import sys def md5s(): m=hashlib.md5() strs=sys.argv[1] m.update(strs.encode("ut ...
- ansible 学习记录
Ansible 的重新学习记录 这里我的Ansible的宿主机是centos 7.2系统,这里我通过yum 安装Ansible 1.配置epel源 sudo yum -y install epel-r ...
- 如何更新 Visual Studio 2017 的离线安装包
现在 Visual Studio 2017 已经不再使用原来的 iso 镜像提供离线安装包了,需要的话,可以通过命令行参数下载离线安装包,例如: vs_Enterprise.exe --layout ...
- Android开发中无处不在的设计模式——动态代理模式
继续更新设计模式系列.写这个模式的主要原因是近期看到了动态代理的代码. 先来回想一下前5个模式: - Android开发中无处不在的设计模式--单例模式 - Android开发中无处不在的设计模式-- ...
- confluence数据库的配置文件
mysql> select u.id,u.user_name,u.active from cwd_user u join cwd_membership m on u.id=m.child_use ...
- EditText: 自定义EditText 触摸时无法获取焦点
写了一个自定义View,继承EditText,但是在触摸时无法获取到焦点. 在XML中添加 android:focusableInTouchMode="true" 设置触摸时可以获 ...