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

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

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