一、创建项目

创建WPF (.Net Core)项目

二、CefSharp引用

程序包管理器控制台引入CefSharp

  1. Install-Package CefSharp.Wpf -Version 85.3.130

CefSharp默认不支持AnyCPU,因此需要添加AnyCPU支持 https://github.com/cefsharp/CefSharp/issues/1714

首先在Project中增加如下配置

  1. <CefSharpAnyCpuSupport>true</CefSharpAnyCpuSupport>

接着在App.xaml.cs中 增加AssemblyResolve事件动态解析加载失败的程序集

  1. public partial class App : Application
  2. {
  3. public App()
  4. {
  5. //Add Custom assembly resolver
  6. AppDomain.CurrentDomain.AssemblyResolve += Resolver;
  7.  
  8. //Any CefSharp references have to be in another method with NonInlining
  9. // attribute so the assembly rolver has time to do it's thing.
  10. InitializeCefSharp();
  11. }
  12.  
  13. [MethodImpl(MethodImplOptions.NoInlining)]
  14. private static void InitializeCefSharp()
  15. {
  16. var settings = new CefSettings();
  17.  
  18. // Set BrowserSubProcessPath based on app bitness at runtime
  19. settings.BrowserSubprocessPath = Path.Combine(AppDomain.CurrentDomain.SetupInformation.ApplicationBase,
  20. Environment.Is64BitProcess ? "x64" : "x86",
  21. "CefSharp.BrowserSubprocess.exe");
  22.  
  23. // Make sure you set performDependencyCheck false
  24. Cef.Initialize(settings, performDependencyCheck: false, browserProcessHandler: null);
  25. }
  26.  
  27. // Will attempt to load missing assembly from either x86 or x64 subdir
  28. // Required by CefSharp to load the unmanaged dependencies when running using AnyCPU
  29. private static Assembly Resolver(object sender, ResolveEventArgs args)
  30. {
  31. if (args.Name.StartsWith("CefSharp"))
  32. {
  33. string assemblyName = args.Name.Split(new[] { ',' }, 2)[0] + ".dll";
  34. string archSpecificPath = Path.Combine(AppDomain.CurrentDomain.SetupInformation.ApplicationBase,
  35. Environment.Is64BitProcess ? "x64" : "x86",
  36. assemblyName);
  37.  
  38. return File.Exists(archSpecificPath)
  39. ? Assembly.LoadFile(archSpecificPath)
  40. : null;
  41. }
  42. return null;
  43. }
  44. }

三、CefSharp初始化

在 InitializeCefSharp中添加代码启动DPI支持

  1. Cef.EnableHighDPISupport();

禁用GPU及代理(启用GPU可能会在网页拖拽过程中页面闪烁)

  1. settings.CefCommandLineArgs.Add("disable-gpu","1");
  2. settings.CefCommandLineArgs.Add("no-proxy-server","1");

四、引入ChromiumWebBrowser

新建用户控件MWebBrowserUc并在Xaml中添加 ChromiumWebBrowser控件

  1. <UserControl x:Class="MWebBrowser.MWebBrowserUc"
  2. xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  3. xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
  4. xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
  5. xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
  6. xmlns:web="clr-namespace:CefSharp.Wpf;assembly=CefSharp.Wpf"
  7. mc:Ignorable="d"
  8. d:DesignHeight="450" d:DesignWidth="800">
  9. <Grid>
  10. <web:ChromiumWebBrowser x:Name="CefWebBrowser"/>
  11. </Grid>
  12. </UserControl>

cs代码中增加Load方法

  1. public void Load(string url)
  2. {
      CefWebBrowser.Load(url);
  3. }

在MainWindow中引用该UserControl

  1. <Window x:Class="MWebBrowser.MainWindow"
  2. xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  3. xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
  4. xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
  5. xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
  6. xmlns:webbrowser="clr-namespace:MWebBrowser"
  7. mc:Ignorable="d"
  8. Title="MainWindow" Height="450" Width="800">
  9. <Grid>
  10. <webbrowser:MWebBrowserUc x:Name="MWebBrowser"/>
  11. </Grid>
  12. </Window>

并在MainWindow Load事件中执行

  1. private void MainWindow_Loaded(object sender, RoutedEventArgs e)
  2. {
  3. string url = "http://www.baidu.com";
  4. MWebBrowser.Load(url);
  5. }

运行如下

基于CefSharp开发(一)开发什么?没想好的更多相关文章

  1. 基于CefSharp开发浏览器(八)浏览器收藏夹栏

    一.前言 上一篇文章 基于CefSharp开发(七)浏览器收藏夹菜单 简单实现了部分收藏夹功能 如(添加文件夹.添加收藏.删除.右键菜单部分功能) 后续代码中对MTreeViewItem进行了扩展,增 ...

  2. 基于lucene的案例开发:查询语句创建PackQuery

    转载请注明出处:http://blog.csdn.net/xiaojimanman/article/details/44656141 http://www.llwjy.com/blogdetail/1 ...

  3. 基于Asterisk的VoIP开发指南——(2)Asterisk AGI程序编写指南

    原文:基于Asterisk的VoIP开发指南--(2)Asterisk AGI程序编写指南 5. Asterisk AGI程序编写指南 5.1概述 很多时候,我们需要在拨号方案中做某些业务逻辑的判断或 ...

  4. 【Qt编程】基于Qt的词典开发系列--后序

    从去年八月份到现在,总算完成了词典的编写以及相关技术文档的编辑工作.从整个过程来说,文档的编写比程序的实现耗费的时间更多.基于Qt的词典开发系列文章,大致包含了在编写词典软件过程中遇到的技术重点与难点 ...

  5. 【Qt编程】基于Qt的词典开发系列<三>--开始菜单的设计

    这篇文章讲讲如何实现开始菜单(或者称为主菜单)的设计.什么是开始菜单呢?我们拿常用的软件来用图例说明,大多数软件的开始菜单在左下角,如下图: 1.window 7的开始菜单 2.有道词典的主菜单 3. ...

  6. 【Qt编程】基于Qt的词典开发系列<二>--本地词典的设计

    我设计的词典不仅可以实现在线查单词,而且一个重大特色就是具有丰富的本地词典库:我默认加入了八个类型的词典,如下所示: 由于是本人是通信专业,因此加入了华为通信词典.电子工程词典,又由于我喜爱编程,也加 ...

  7. 基于.Net进行前端开发的技术栈发展路线(二)

    前言 上一篇<我的技能树>文章分享了我的技能成长过程,还未完成,今天继续跟大家分享. 01 我的技能树 我的当前的技能树: 其中,标注为黄色旗帜的是基本掌握,标注为红色旗帜的为使用熟练.未 ...

  8. 基于.Net进行前端开发的技术栈发展路线(一)

    前言 今天想讲讲的是我的技术树.我最初是做CS开发的,第一阶段的技术经历是以Powerbuilder来做CS开发,第二阶段开始基于C#做winform开发,眼看前端开发越来越流行,需要更广泛的技术栈势 ...

  9. 基于Vivado的嵌入式开发 ——PS+PL实践

    基于Vivado的嵌入式开发 ——PS走起 硬件平台:ZedBoard 开发工具:Vivado 2014.2 1.规划 废话不多说,依然是流水灯,这次是采用PS+PL实现. 功能依旧简单,目标是为了学 ...

  10. 基于IDEA的JavaWeb开发环境搭建

    基于IDEA的JavaWeb开发环境搭建 基于IDEA的JavaWeb开发环境搭建 jdk下载安装配置环境变量 下载 安装 配置环境变量 下载安装激活使用IntelliJ IDEA 下载 安装 激活 ...

随机推荐

  1. mysql运维-slave_skip_errors

    1 简介    mysql在主从复制过程中,由于各种的原因,从服务器可能会遇到执行BINLOG中的SQL出错的情况,在默认情况下,服务器会停止复制进程,不再进行同步,等到用户自行来处理.    sla ...

  2. MATLAB-simulink实现逻辑组合电路--全加器

    author: ZKe 全加器的原理这里就不讲了,不知道的还是去看看数字逻辑课本吧,这里主要记录一下simulink实现逻辑组合电路的方法 首先我们需要知道它的电路图,如下(借用慕课赵贻竹老师的PPT ...

  3. 五分钟看懂抓包神技:DPDK

    我是一个网络监控软件,我被开发出来的使命就是监控网络中进进出出的所有通信流量. 一直以来,我的工作都非常的出色,但是随着我监控的网络越来越庞大,网络中的通信流量也变得越来越多,我开始有些忙不过来了,逐 ...

  4. Collection迭代器Iterator的使用

    package com.cx.Collecion; import java.util.ArrayList; import java.util.Collection; import java.util. ...

  5. .NetCore Docker一次记录

    1:项目添加docker支持 2:定位到项目主目录 按住shift,鼠标右键,打开powershell,输入命令 dotnet publish 此时会在目录 bin\Debug\netcoreapp2 ...

  6. Boltzmann Machine 玻尔兹曼机入门

    Generative Models 生成模型帮助我们生成新的item,而不只是存储和提取之前的item.Boltzmann Machine就是Generative Models的一种. Boltzma ...

  7. python_选课系统

    import sys import pickle import os USERINFO = r'C:\Users\12078\PycharmProjects\OldBoy\选课系统\userinfo' ...

  8. TPE-ThreadPoolExecutor

    TPE: java.util.concurrent.ThreadPoolExecutor public ThreadPoolExecutor(int corePoolSize, int maximum ...

  9. 基于云开发 CloudBase 搭建在线视频会议应用教程

    基于云开发 CloudBase 搭建在线视频会议应用 在线视频会议应用是基于浏览器的能力 WebRTC 以及 腾讯云开发 CloudBase 能力构建而成的应用. 在云开发的助力下, 一个复杂的在线会 ...

  10. Git常用命令【ZeyFra】

    // 账户设置 git config --global user.name "ZeyFra" git config --global user.email "zeyfra ...