zoukankan      html  css  js  c++  java
  • 使用CefSharp在.Net程序中嵌入Chrome浏览器(七)——右键菜单

    一个常用的功能就是禁止浏览器本身的右键菜单,靠在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 = new ChromiumWebBrowser()
    {
        MenuHandler = new NullMenuHandler()

    };

    这种方式也可以自定义右键菜单,详细信息参考如下。MenuHandler.cs

    定制右键菜单也可以采用如下做法:

    1. 用上面的方式将Chrome自己的菜单屏蔽,
    2. 把HTML元素的右键点击事件通过脚本集成的方式回调给主程序,弹出自定义的WPF右键菜单
    3. WPF的右键菜单执行后,将命令用脚本的方式传递给Chrome

    这样的方式下,可以直接使用WPF的右键菜单,并且也可以根据html元素的事件灵活显示菜单,虽然工作量大些,但更加灵活和自由,也可以和系统的右键菜单风格一致。

  • 相关阅读:
    HFUT 1356.转啊转(安徽省2016“京胜杯”程序设计大赛 E)
    HFUT 1354.砝码称重(安徽省2016“京胜杯”程序设计大赛 A)
    AOJ 331.汉诺塔
    AOJ 763.过河卒
    AOJ 762.分数数列
    AOJ 761.Fibonacci序列
    AOJ 760.尾数相等的数
    POJ 1035.Spell checker
    POJ 2299.Ultra-QuickSort
    POJ 2503.Babelfish
  • 原文地址:https://www.cnblogs.com/TianFang/p/9919768.html
Copyright © 2011-2022 走看看