如何隐藏CefSharp.WinForms.ChromiumWebBrowser右键单击上下文菜单?

时间:2015-12-12 19:52:54

标签: .net cefsharp

我在我的项目中使用CefSharp.WinForms.ChromiumWebBrowser v45。当我右键单击Web浏览器时,将显示默认的上下文菜单:

dialog picture

但我不想展示任何东西。我该怎么办?

5 个答案:

答案 0 :(得分:24)

这是像我这样懒惰的人的实施。它基于CefSharp v53.0.0

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

    public bool OnContextMenuCommand(IWebBrowser browserControl, IBrowser browser, IFrame frame, IContextMenuParams parameters, CefMenuCommand commandId, CefEventFlags eventFlags)
    {

        return false;
    }

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

    }

    public bool RunContextMenu(IWebBrowser browserControl, IBrowser browser, IFrame frame, IContextMenuParams parameters, IMenuModel model, IRunContextMenuCallback callback)
    {
        return false;
    }
}

如何使用

ChromiumWebBrowser browser = new ChromiumWebBrowser();
browser.MenuHandler = new CustomMenuHandler();

答案 1 :(得分:2)

如果您实施IContextMenuHandler,则可以控制ContextMenu。下面的两个链接演示了所需的内容(以及其他一些有用的功能)。

https://github.com/cefsharp/CefSharp/blob/935d3900ba2147f4786386596b62339087ff61b0/CefSharp.WinForms.Example/Handlers/MenuHandler.cs#L15

https://github.com/cefsharp/CefSharp/blob/c18f951a97a515df112d67775c767d4222f88c23/CefSharp.WinForms.Example/BrowserTabUserControl.cs#L31

一般来说,CefSharp.WinForms.Example项目会演示很多功能,如果您需要其他功能,请查看它。

答案 2 :(得分:1)

最简单的方法是将事件PreviewMouseRightButtonUp和PreviewMouseRightButtonDown设置为具有相同功能的事件,其e.Handle = true。右键单击时,此解决方案将不会显示cefsharp的上下文菜单。

XAML:

$("#sort-col-1").on("click", function(){
  var icon = $(this).find(".glyphicon");
  if(icon.hasClass("glyphicon-sort-by-attributes")){
    icon.removeClass("glyphicon-sort-by-attributes");
    icon.addClass("glyphicon-sort-by-attributes-alt");
  }
  else{
    icon.removeClass("glyphicon-sort-by-attributes-alt");
    icon.addClass("glyphicon-sort-by-attributes");
  }
});

函数:

<wpf:ChromiumWebBrowser Grid.Row="1" x:Name="Browser" Margin="30,0" IsBrowserInitializedChanged="Browser_IsBrowserInitializedChanged" PreviewMouseRightButtonDown="Browser_PreviewMouseRightButton" PreviewMouseRightButtonUp="Browser_PreviewMouseRightButton"/>

答案 3 :(得分:0)

  <div class="input-group" xmlns="">
    <input #searchField autofocus type="text" class="form-control"
           [(ngModel)]="searchValue" #sv="ngModel" (keyup.enter)="doSearch(searchValue)">
    <button *ngIf="(sv.dirty || sv.touched)" class="btn-primary fa fa-search" id="search-icon"
            (click)="doSearch(searchValue)"></button>
    <span *ngIf="!(sv.dirty || sv.touched)">Your text here</span>

  </div>

答案 4 :(得分:0)

您可以这样做。...

ChromiumWebBrowser browser = new ChromiumWebBrowser();
browser.LoadingStateChanged += (sender, args) =>
{
    if (args.IsLoading == false)
    {
        _browser.ExecuteScriptAsync("document.oncontextmenu = function() { return false; };");
    }
};

我正在使用此版本:

<package id="CefSharp.Wpf" version="78.3.10-CI3386" targetFramework="net48" />