Содержание
Если вы знаете, как работать с 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. Установите свой собственный обработчик меню в браузере по умолчанию
Наконец, вам нужно только установить значение MenuHandler
собственность вашего ChromiumWebBrowser
как новый экземпляр вашего пользовательского обработчика меню, и контекстное меню больше не должно появляться. Это может быть достигнуто при создании браузера в вашем текущем коде, например:
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 (но не обязательно).