C# WPF中嵌入Chrome浏览器

借鉴 

https://www.cnblogs.com/guxin/p/wpf-embed-html-by-cefsharp.html

搭建基本的开发环境

  新建WPF程序

  右击隐引用,选择管理NuGet包

  在nuget中搜索CefSharp,其中有CefSharp.WinForms和CefSharp.Wpf,在这里应该安装CefSharp.Wpf

  因为CefSharp不支持AnyCPU,需要VS中为项目编译平台单独指定x86和x64

  需重启vs才可以正常运行

XAML的简单示例

1<Window x:Class="Demo.MainWindow" 2 xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 3 xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 4 xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 5 xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 6 xmlns:local="clr-namespace:Demo" 7 xmlns:wpf="clr-namespace:CefSharp.Wpf;assembly=CefSharp.Wpf" 8 xmlns:cef="clr-namespace:CefSharp;assembly=CefSharp.Core" 9 mc:Ignorable="d" 10 Title="MainWindow" Height="350" Width="525" Loaded="Window_Loaded"> 11 <Grid> 12 <wpf:ChromiumWebBrowser x:Name="Browser" Address="http://www.baidu.com"/> 13 </Grid> 14</Window>

  注意使用xmlns:wpf="clr-namespace:CefSharp.Wpf;assembly=CefSharp.Wpf"和xmlns:cef="clr-namespace:CefSharp;assembly=CefSharp.Core"来引入浏览器控件所在的程序集。

直接在类中实现的简单示例

  借鉴  https://blog.csdn.net/yeness/article/details/70141857

1using CefSharp; 2using CefSharp.Wpf; 3using System; 4using System.Collections.Generic; 5using System.Linq; 6using System.Text; 7using System.Threading.Tasks; 8using System.Windows; 9using System.Windows.Controls; 10using System.Windows.Data; 11using System.Windows.Documents; 12using System.Windows.Input; 13using System.Windows.Media; 14using System.Windows.Media.Imaging; 15using System.Windows.Navigation; 16using System.Windows.Shapes; 17 18namespace Demo1 19{ 20 /// <summary> 21 /// MainWindow.xaml 的交互逻辑 22 /// </summary> 23 public partial class MainWindow : Window 24 { 25 public MainWindow() 26 { 27 InitializeComponent(); 28 } 29 ChromiumWebBrowser webView; 30 private void Window_Loaded(object sender, RoutedEventArgs e) 31 { 32 var setting = new CefSettings(); 33 if (Cef.IsInitialized == false) 34 { 35 // Cef.Initialize(setting, true, false); 36 Cef.Initialize(setting); 37 } 38 webView = new ChromiumWebBrowser(); 39 grid.Children.Add(webView); 40 41 /*string path= AppDomain.CurrentDomain.BaseDirectory + @"\gis.offline\index.html"; 42 webView.Address = path;*/ 43 webView.Address = "http://www.baidu.com"; 44 // webView.PreviewTextInput += new TextCompositionEventHandler(OnPreviewTextInput); 45 } 46 // 修复中文的bug 47 protected void OnPreviewTextInput(object sender, TextCompositionEventArgs e) 48 { 49 foreach (char t in e.Text) 50 { 51 if (IsChinese(t)) 52 webView.GetBrowser().GetHost().SendKeyEvent((int)CefSharp.Wpf.WM.CHAR, (int)t, 0); 53 } 54 base.OnPreviewTextInput(e); 55 } 56 /// <summary> 57 /// 判断是否中文 58 /// </summary> 59 /// <param name="Text"></param> 60 /// <returns></returns> 61 public bool IsChinese(char Text) 62 { 63 64 if ((int)Text > 127) 65 return true; 66 67 return false; 68 } 69 } 70}

 新建类OpenPageSelf.cs,用于设置让新开的链接覆盖显示在本页上

  借鉴  https://www.cnblogs.com/wolf-sun/p/6929728.html

  新建OpenPageSelf类后,在webView.Address = "http://www.baidu.com";后添加webView.LifeSpanHandler = new OpenPageSelf();

1using CefSharp; 2using CefSharp.Wpf; 3using System; 4using System.Collections.Generic; 5using System.Linq; 6using System.Text; 7using System.Threading.Tasks; 8 9namespace Demo1 10{ 11 /// <summary> 12 /// 在自己窗口打开链接 13 /// </summary> 14 internal class OpenPageSelf:ILifeSpanHandler 15 { 16 public bool DoClose(IWebBrowser browserControl,IBrowser browser) 17 { 18 return false; 19 } 20 public void OnAfterCreated(IWebBrowser browserControl,IBrowser browser) 21 { 22 23 } 24 25 public void OnBeforeClose(IWebBrowser chromiumWebBrowser, IBrowser browser) 26 { 27 28 } 29 30 public bool OnBeforePopup(IWebBrowser browserControl, IBrowser browser, IFrame frame, string targetUrl, 31string targetFrameName, WindowOpenDisposition targetDisposition, bool userGesture, IPopupFeatures popupFeatures, 32IWindowInfo windowInfo, IBrowserSettings browserSettings, ref bool noJavascriptAccess, out IWebBrowser newBrowser) 33 { 34 newBrowser = null; 35 var chromiumWebBrowser = (ChromiumWebBrowser)browserControl; 36 chromiumWebBrowser.Load(targetUrl); 37 return true; //Return true to cancel the popup creation copyright by codebye.com. 38 } 39 } 40}
点赞
收藏

评论区

加载中...

相关推荐

MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1

文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s

Oracle 分组与拼接字符串同时使用

SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(

MySQL部分从库上面因为大量的临时表tmp_table造成慢查询

背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_

手写Java HashMap源码

HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22

swap空间的增减方法

(1)增大swap空间去激活swap交换区:swapoff v /dev/vg00/lvswap扩展交换lv:lvextend L 10G /dev/vg00/lvswap重新生成swap交换区:mkswap /dev/vg00/lvswap激活新生成的交换区:swapon v /dev/vg00/lvswap

Java获得今日零时零分零秒的时间(Date型)

publicDatezeroTime()throwsParseException{    DatetimenewDate();    SimpleDateFormatsimpnewSimpleDateFormat("yyyyMMdd00:00:00");    SimpleDateFormatsimp2newS