需求: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

  1. Github上对该问题的讨论:https://github.com/cefsharp/CefSharp/issues/1714
  2. 参考Demo:https://github.com/cefsharp/CefSharp.MinimalExample/tree/demo/anycpu
  3. 其他资料: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应用时程序无法退出?

如何屏蔽浏览器右键菜单?

【WPF】使用CefSharp嵌入HTML网页的更多相关文章

  1. WPF使用CefSharp嵌入网页

    1.点击项目应用下的管理NuGet程序包 2.在浏览中输入cefsharp-->查找 CefSharp.Wpf-->点击安装,等待安装完成 3.如果遇到一下问题将解决方案和项目都改成64位 ...

  2. 在WPF中使用CefSharp嵌入浏览器

    日常开发中,我们需要将一些Web页面嵌入到桌面客户端软件中.下面我们使用CefSharp嵌入浏览器来实现. 首先先介绍一下CefSharp嵌入式浏览器,它是基于Google浏览器的一个组件,我们可以在 ...

  3. 在WPF中使用CefSharp嵌入浏览器(转)

    在WPF中使用CefSharp嵌入浏览器   日常开发中,我们需要将一些Web页面嵌入到桌面客户端软件中.下面我们使用CefSharp嵌入浏览器来实现. 首先先介绍一下CefSharp嵌入式浏览器,它 ...

  4. WinForm嵌入Web网页的解决方案

    企业级信息化系统绝大部分采用BS架构实现,如门户网站.OA系统.电商网站等,通过浏览器输入Web网址即可访问,对于使用者来说非常便捷,对于开发维护者来说也非常方便,程序维护只需更新服务器即可,使用者无 ...

  5. WPF应用程序内嵌网页

    原文:WPF应用程序内嵌网页 版权声明:本文为博主原创文章,转载请注明出处. https://blog.csdn.net/shaynerain/article/details/78160984 WPF ...

  6. C# 使用CefSharp嵌入网站

    最近有一个项目,需要在winform中嵌套web网站,从网上了解到几个相关的组件有winform自带的IE内核的WebBrowser,有第三方组件谷歌内核的webkit.cefsharp.chromi ...

  7. 博客代码:iframe—网页中嵌入其他网页

    iframe 是一个可以把另外一个网页嵌入到一个网页里的代码,非常有用.对于一个内容不错的网页,要方便地把它搬到自己的博客里,用这个代码最合适.而对于在新浪博客里不支持的一些网页效果和代码,可先把他们 ...

  8. WPF 将DLL嵌入EXE文件(安装包)

    网上很多例子,各种套路,就是没有测试过. WPF 将DLL嵌入EXE文件的套路是这样的 1.将要引用的dll源文件添加到wpf 项目中,dll 的属性->生成操作为[嵌入的资源]. 2.监听  ...

  9. Display HTML in WPF and CefSharp

    https://www.codeproject.com/articles/881315/display-html-in-wpf-and-cefsharp-tutorial-part Download ...

随机推荐

  1. PHP中数字检测is_numeric与ctype_digit的区别介绍

    PHP中的两个函数is_numeric和ctype_digit都是检测字符串是否是数字,但也存在一点区别 is_numeric:检测是否为数字字符串,可为负数和小数 ctype_digit:检测字符串 ...

  2. Chrome浏览器如何不让它缓存?

    chrome对js和图片的缓存,导致调试的程序不是最新的,有时F5刷新了都没用. 此时应: Ctrl+F5 或 Shift+F5 重新载入当前网页,忽略缓存的内容.

  3. Unable to convert MySQL date/time value to System.DateTime

    当使用.NET connector 连接MYSQL数据库,检索某些数据的时候,你可能会得到一个错误信息: "Unable to convert MySQL date/time value t ...

  4. hihoCoder 1015 KMP算法(kmp)

    #1015 : KMP算法 时间限制:1000ms 单点时限:1000ms 内存限制:256MB 描写叙述 小Hi和小Ho是一对好朋友,出生在信息化社会的他们对编程产生了莫大的兴趣.他们约定好互相帮助 ...

  5. mac 上运行cassandra出现的java.net.MalformedURLException: Local host name unknown: java.net.UnknownHostException: : : unknown error错误解决方法

    mac 上运行cassandra出现的java.net.MalformedURLException: Local host name unknown: java.net.UnknownHostExce ...

  6. mapreduce 只使用Mapper往多个hbase表中写数据

    只使用Mapper不使用reduce会大大减少mapreduce程序的运行时间. 有时候程序会往多张hbase表写数据. 所以有如题的需求. 下面给出的代码,不是可以运行的代码,只是展示driver中 ...

  7. cocopods 问题

    http://www.cocoachina.com/bbs/read.php?tid=1711580

  8. Atitit  项目界面h5化静态html化计划---vue.js 把ajax获取到的数据 绑定到表格控件 v2 r33.docx

    Atitit  项目界面h5化静态html化计划---vue.js 把ajax获取到的数据 绑定到表格控件 v2 r33.docx 1. 场景:应用在项目列表查询场景下1 1.1. 预计初步掌握vue ...

  9. Windows 虚拟桌面工具 Desktops v2.0

    https://technet.microsoft.com/en-us/sysinternals/cc817881.aspx

  10. 机器学习算法实现解析——word2vec源代码解析

    在阅读本文之前,建议首先阅读"简单易学的机器学习算法--word2vec的算法原理"(眼下还没公布).掌握例如以下的几个概念: 什么是统计语言模型 神经概率语言模型的网络结构 CB ...