2015-01-06 164 views

回答

4

好吧,我能夠弄清楚這一點。在我原來的問題中引用的文章的問題是它使用嵌入式Chromium組件。我沒有使用它。我正在使用cefsharp鉻網頁瀏覽器。要隱藏右鍵單擊上下文菜單,我在本文中找到了答案:https://github.com/cefsharp/CefSharp/issues/107

您只需定義一個實現IMenuHandler接口的類,然後將瀏覽器控件的MenuHandler屬性設置爲此類。最後在類中返回OnBeforeContextMenu方法中的FALSE。這裏是類:

public class CustomMenuHandler : IMenuHandler 
{ 
    public bool OnBeforeContextMenu(IWebBrowser browser) 
    { 
     return false; 
    } 
} 

接下來,鉻網頁瀏覽器的MenuHandler財產的情況下設置爲該類:

var browser = new ChromiumWebBrowser(string.empty); 
browser.MenuHandler = new CustomMenuHandler(); 

爲我工作。

+1

這是一個過時的答案了。不適用於版本49。 –

11

我面臨同樣的問題,但上述方案可能不再適用,因爲該接口IMenuHandler(更名爲IContextMenuHandler)使用已經有了一些改變,不再存在

bool OnBeforeContextMenu(IWebBrowser browser); 

現在具有以下簽名:

void OnBeforeContextMenu(IWebBrowser browserControl, IBrowser browser, IFrame frame, IContextMenuParams parameters, IMenuModel model); 

的SO問題的問題(Disable context menu in Chromium Embedded 3 (DCEF3))連接與Pascal和Inno Setup的腳本來完成,但調整爲C#和ChromiumWebBrowser接受的答案工作爲了我。解決方法是在執行OnBeforeContextMenu時清除模型參數。的IContextMenuHandler實現可以是這樣的:

public class CustomContextHandler : IContextMenuHandler 
{ 
    public void OnBeforeContextMenu(IWebBrowser browserControl, CefSharp.IBrowser browser, IFrame frame, IContextMenuParams parameters, 
     IMenuModel model) 
    { 
     model.Clear(); 
    } 

    public bool OnContextMenuCommand(IWebBrowser browserControl, CefSharp.IBrowser browser, IFrame frame, IContextMenuParams parameters, 
     CefMenuCommand commandId, CefEventFlags eventFlags) 
    { 
     return false; 
    } 

    public void OnContextMenuDismissed(IWebBrowser browserControl, CefSharp.IBrowser browser, IFrame frame) 
    { 
    } 
} 

然後在創建該鉻web瀏覽器的目標代碼:

browser = new ChromiumWebBrowser(url); 
browser.MenuHandler = new CustomContextHandler(); 
相關問題