本文概述
如果你知道如何使用CefSharp, 并且已经在一个很棒的项目中实现了它, 那么你将知道上下文菜单的含义和外观:
尽管我们已经写过有关如何在CefSharp控件上的上下文菜单中添加新选项的信息, 但有时你只是想删除上下文菜单以防止应用程序出现任何问题。在本文中, 我们将向你介绍如何轻松实现它。
重要的提示
如果你在应用程序上使用自定义HTML / JavaScript / CSS上下文菜单, 则此代码段非常友好且有用, 因为基于HTML的上下文菜单(在JS应用程序上)仍然可以使用!
1.创建一个自定义菜单处理程序
在项目上创建一个名为MyCustomMenuHandler的新类(可以根据需要更改名称)。该类需要使用应用程序的名称空间并扩展IContextMenuHandler, 因此, 显然应该将CefSharp名称空间导入到你的类中。
该接口公开了以下显然需要声明的4个成员(甚至为空), 否则, 你将在代码”未实现成员等”上遇到异常:
using CefSharp;
public class MyCustomMenuHandler : IContextMenuHandler
{
public void OnBeforeContextMenu(IWebBrowser browserControl, IBrowser browser, IFrame frame, IContextMenuParams parameters, IMenuModel model)
{
model.Clear();
}
public bool OnContextMenuCommand(IWebBrowser browserControl, IBrowser browser, IFrame frame, IContextMenuParams parameters, CefMenuCommand commandId, CefEventFlags eventFlags)
{
return false;
}
public void OnContextMenuDismissed(IWebBrowser browserControl, IBrowser browser, IFrame frame)
{
}
public bool RunContextMenu(IWebBrowser browserControl, IBrowser browser, IFrame frame, IContextMenuParams parameters, IMenuModel model, IRunContextMenuCallback callback)
{
return false;
}
}
一旦该类在你的项目中可用, 然后继续步骤2来注册你的自定义上下文菜单处理程序。
2.在浏览器上将自定义菜单处理程序设置为默认值
最后, 你只需要将ChromiumWebBrowser的MenuHandler属性的值设置为自定义菜单处理程序的新实例, 并且上下文菜单就不再出现。这可以在使用当前代码创建浏览器期间实现, 例如:
CefSettings settings = new CefSettings();
// Some settings if you have, here
// Initialize cef with the provided settings
Cef.Initialize(settings);
// Create a browser component
ChromiumWebBrowser chromeBrowser = new ChromiumWebBrowser("www.somewebsite or file.com");
// Register your Custom Menu Handler as default
chromeBrowser.MenuHandler = new MyCustomMenuHandler();
// ...
// Rest of your code
// ...
如前所述, 如果你仍然希望你的应用程序具有自定义上下文菜单, 但是该菜单是使用JavaScript制作的(但不一定存在), 则此解决方案确实很棒。
编码愉快!
评论前必须登录!
注册