一个常用的功能就是禁止浏览器本身的右键菜单, 靠在 WPF 中拦截鼠标事件是不行的, 可以通过设置 MenuHandler 来实现.
首先实现一个 IContextMenuHandler.
- public class NullMenuHandler : IContextMenuHandler
- {
- public bool RunContextMenu(IwebBrowser browserControl, IBrowser browser, IFrame frame, IContextMenuParams parameters, IMenuModel model, IRunContextMenuCallback callback)
- {
- return false;
- }
- public void OnBeforeContextMenu(IWebBrowser browserControl, IBrowser browser, IFrame frame, IContextMenuParams parameters, IMenuModel model)
- {
- model.Clear();
- }
- public void OnContextMenuDismissed(IWebBrowser chromiumWebBrowser, IBrowser browser, IFrame frame)
- {
- }
- public bool OnContextMenuCommand(IWebBrowser chromiumWebBrowser, IBrowser browser, IFrame frame,
- IContextMenuParams parameters,
- CefMenuCommand commandId, CefEventFlags eventFlags)
- {
- throw new NotImplementedException();
- }
- }
- View Code
然后指定 Chrome 的 MenuHandler 即可.
- _webView= newChromiumWebBrowser()
- {
- MenuHandler= newNullMenuHandler()
- };
这种方式也可以自定义右键菜单, 详细信息参考如下.
定制右键菜单也可以采用如下做法:
用上面的方式将 Chrome 自己的菜单屏蔽,
把 html 元素的右键点击事件通过脚本集成的方式回调给主程序, 弹出自定义的 WPF 右键菜单
WPF 的右键菜单执行后, 将命令用脚本的方式传递给 Chrome
这样的方式下, 可以直接使用 WPF 的右键菜单, 并且也可以根据 HTML 元素的事件灵活显示菜单, 虽然工作量大些, 但更加灵活和自由, 也可以和系统的右键菜单风格一致.
来源: http://www.bubuko.com/infodetail-2915101.html