禁用右鍵菜單其實是很容易的。主就要是實現一個接口 IMenuHandler ,這個接口有一個 OnBeforeContextMenu 的方法,我們在這里讓返回一個false,右鍵菜單就消失了。
internal class MenuHandler : IMenuHandler { public bool OnBeforeContextMenu(IWebBrowser browser, IContextMenuParams parameters) { return false; } }
再將這個對像的實例賦給 ChromiumWebBrowser 對象的 MenuHandler 屬性上就OK啦。
var browser = new ChromiumWebBrowser(url); browser.MenuHandler = new MenuHandler();
以上的方法適用於老版本的CEFsharp
43.00開始,IMenuHandler已經改名了,直接復制以上代碼是不存在的
問了高手,自己琢磨了下 原來 改成了 IContextMenuHandler
而這個接口下面已經有了幾個控制菜單的方法,由於本人入門C#不深,只能根據vs提示,提示說接口需要重寫,
就根據提示,重寫了方法,但是默認都是throw new NotImplementedException();
很明顯這樣是不行的,這三個方法從字面的理解,控制菜單的出現的應該是OnBeforeContextMenu,有2個,一個是bool,一個就不知道了
仔細看,第二個不需要返回值,里面有個IMenuModel model,無意中在網上看到了高手直接調用cef下用cefsharp的一個方法model.Clear();
胡亂寫下了如下代碼,還請高手看到之后指正
internal class MenuHandler : IContextMenuHandler
{
public bool OnBeforeContextMenu(IWebBrowser browser,IBrowser ibrower,IFrame iframe,IContextMenuParams icontextmenuparams,IMenuModel imenumodel )
{
return false;
}
public bool OnContextMenuCommand(IWebBrowser browserControl, IBrowser browser, IFrame frame, IContextMenuParams parameters, CefMenuCommand commandId, CefEventFlags eventFlags)
{
return false;
//throw new NotImplementedException();
}
public void OnContextMenuDismissed(IWebBrowser browserControl, IBrowser browser, IFrame frame)
{
// throw new NotImplementedException();
}
void IContextMenuHandler.OnBeforeContextMenu(IWebBrowser browserControl, IBrowser browser, IFrame frame, IContextMenuParams parameters, IMenuModel model)
{
model.Clear();
}
}