您可以通过实现IContextMenuHandler 创建自己的上下文菜单。您没有具体说明您使用的是 WinForms 还是 WPF 版本,但 GitHub 上有大量示例。
WinForms
https://github.com/cefsharp/CefSharp/blob/master/CefSharp.WinForms.Example/Handlers/MenuHandler.cs
WPF
https://github.com/cefsharp/CefSharp/blob/master/CefSharp.Wpf.Example/Handlers/MenuHandler.cs
对于任何一种风格,您都将您的 IContextMenuHandler 实现分配给 ChromiumWebBrowser 的 MenuHandler 属性。在本例中,我遵循 GutHub WinForms 示例并在名为 MenuHandler 的类中实现 IContextMenuHandler。以下是WinForms 的示例,但可以轻松转换为WPF。
internal class MenuHandler : IContextMenuHandler
{
private const int Copy = 26503;
void IContextMenuHandler.OnBeforeContextMenu(IWebBrowser browserControl, IBrowser browser, IFrame frame, IContextMenuParams parameters, IMenuModel model)
{
//Add new custom menu items
model.AddItem((CefMenuCommand)Copy, "Copy Link Address");
}
bool IContextMenuHandler.OnContextMenuCommand(IWebBrowser browserControl, IBrowser browser, IFrame frame, IContextMenuParams parameters, CefMenuCommand commandId, CefEventFlags eventFlags)
{
if ((int)commandId == Copy)
{
//using System.Windows.Forms;
Clipboard.SetText(parameters.SourceUrl);
}
return false;
}
void IContextMenuHandler.OnContextMenuDismissed(IWebBrowser browserControl, IBrowser browser, IFrame frame)
{
}
bool IContextMenuHandler.RunContextMenu(IWebBrowser browserControl, IBrowser browser, IFrame frame, IContextMenuParams parameters, IMenuModel model, IRunContextMenuCallback callback)
{
return false;
}
}
那么就只是给ChromiumWebBrowser的MenuHandler属性赋值一个实例
browser.MenuHandler = new MenuHandler();