借鉴
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的简单示例
<Window x:Class="Demo.MainWindow"
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:local="clr-namespace:Demo"
xmlns:wpf="clr-namespace:CefSharp.Wpf;assembly=CefSharp.Wpf"
xmlns:cef="clr-namespace:CefSharp;assembly=CefSharp.Core"
mc:Ignorable="d"
Title="MainWindow" Height="350" Width="525" Loaded="Window_Loaded">
<Grid>
<wpf:ChromiumWebBrowser x:Name="Browser" Address="http://www.baidu.com"/>
</Grid>
</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
using CefSharp;
using CefSharp.Wpf;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
namespace Demo1
{
/// <summary>
/// MainWindow.xaml 的交互逻辑
/// </summary>
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
}
ChromiumWebBrowser webView;
private void Window_Loaded(object sender, RoutedEventArgs e)
{
var setting = new CefSettings();
if (Cef.IsInitialized == false)
{
// Cef.Initialize(setting, true, false);
Cef.Initialize(setting);
}
webView = new ChromiumWebBrowser();
grid.Children.Add(webView);
/*string path= AppDomain.CurrentDomain.BaseDirectory + @"\gis.offline\index.html";
webView.Address = path;*/
webView.Address = "http://www.baidu.com";
// webView.PreviewTextInput += new TextCompositionEventHandler(OnPreviewTextInput);
}
// 修复中文的bug
protected void OnPreviewTextInput(object sender, TextCompositionEventArgs e)
{
foreach (char t in e.Text)
{
if (IsChinese(t))
webView.GetBrowser().GetHost().SendKeyEvent((int)CefSharp.Wpf.WM.CHAR, (int)t, 0);
}
base.OnPreviewTextInput(e);
}
/// <summary>
/// 判断是否中文
/// </summary>
/// <param name="Text"></param>
/// <returns></returns>
public bool IsChinese(char Text)
{
if ((int)Text > 127)
return true;
return false;
}
}
}
新建类OpenPageSelf.cs,用于设置让新开的链接覆盖显示在本页上
借鉴 https://www.cnblogs.com/wolf-sun/p/6929728.html
新建OpenPageSelf类后,在webView.Address = "http://www.baidu.com";后添加webView.LifeSpanHandler = new OpenPageSelf();
using CefSharp;
using CefSharp.Wpf;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Demo1
{
/// <summary>
/// 在自己窗口打开链接
/// </summary>
internal class OpenPageSelf:ILifeSpanHandler
{
public bool DoClose(IWebBrowser browserControl,IBrowser browser)
{
return false;
}
public void OnAfterCreated(IWebBrowser browserControl,IBrowser browser)
{
}
public void OnBeforeClose(IWebBrowser chromiumWebBrowser, IBrowser browser)
{
}
public bool OnBeforePopup(IWebBrowser browserControl, IBrowser browser, IFrame frame, string targetUrl,
string targetFrameName, WindowOpenDisposition targetDisposition, bool userGesture, IPopupFeatures popupFeatures,
IWindowInfo windowInfo, IBrowserSettings browserSettings, ref bool noJavascriptAccess, out IWebBrowser newBrowser)
{
newBrowser = null;
var chromiumWebBrowser = (ChromiumWebBrowser)browserControl;
chromiumWebBrowser.Load(targetUrl);
return true; //Return true to cancel the popup creation copyright by codebye.com.
}
}
}