借鉴
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}