1. 程式人生 > >使用CefSharp在.Net程序中嵌入Chrome瀏覽器(七)——右鍵菜單

使用CefSharp在.Net程序中嵌入Chrome瀏覽器(七)——右鍵菜單

靈活 white .html chrom mod new htm nco blue

原文:使用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元素的事件靈活顯示菜單,雖然工作量大些,但更加靈活和自由,也可以和系統的右鍵菜單風格一致。

使用CefSharp在.Net程序中嵌入Chrome瀏覽器(七)——右鍵菜單