【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 ...
随机推荐
- Oracle 12C -- 扩展varchar2、nvarchar2、和raw数据类型的大小限制
在12C中,varchar2,nvarchar2和raw类型从之前的4K扩展到32K 升级到12C后,参数max_string_size默认值是standard,即不改变varchar2.nvarch ...
- FileZilla FTP 登录 问题
1.一直报错220 (vsFTPd 3.0.2)-AUTH TLS 将加密方式选择为 “只是用普通FTP(不安全)”模式即可 2.服务器发回了不可路由的地址 “传输设置”,传输模式设置为主动.
- 冒泡,setinterval,背景图的div绑定事件,匿名函数问题探究
1.会冒泡到兄弟元素么? $(function(){ $("#a").click(function(){alert("a")}) $("#b" ...
- C#基础第八天-作业-设计类-面向对象方式实现两个帐户之间转账
要求1:完成以下两种账户类型的编码.银行的客户分为两大类:储蓄账户(SavingAccount)和信用账户(CreditAccount),两种的账户类型的区别在于:储蓄账户不允许透支,而信用账户可以透 ...
- 用python参加Kaggle的经验总结【转】
用python参加Kaggle的经验总结 转载自:http://www.jianshu.com/p/32def2294ae6,作者 JxKing 最近挤出时间,用python在kaggle上试了 ...
- Apache Hadoop下一代MapReduce框架(YARN)简介 (Apache Hadoop NextGen MapReduce (YARN))
英文看着头大,先试着翻译一下. E文原文:http://archive.cloudera.com/cdh5/cdh/5/hadoop/hadoop-yarn/hadoop-yarn-site/YARN ...
- 使用OkHttpClient处理json请求处理的方式
今天遇到一个问题,重构老系统时,前端传递的参数是一个json,controller层可以用@ResponseBody来接收. 因为新系统用的是spring cloud这一套,调用其他服务使用的是fei ...
- 怎么在eclipse中安装svn插件
Subclipse Subclipse is an Eclipse Team Provider plug-in providing support for Subversion within th ...
- hadoop集群搭建实践
一.Linux配置1.设置hosts的ip(集群机器做同样操作)vi /etc/hosts192.168.91.129 master192.168.91.130 slave #互相ping通即可 pi ...
- Android开发之API应用指南
原文:http://android.eoe.cn/topic/android_sdk 编辑流程 这里主要是和Android技术相关的开发指南,很多都是来源于官方的API Guides( http:// ...