这是懒人们的实现方式,就像我一样。它基于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();
<wpf:ChromiumWebBrowser><wpf:ChromiumWebBrowser.MenuHandler><local:CustomMenuHandler /></wpf:ChromiumWebBrowser.MenuHandler></wpf:ChromiumWebBrowser>
- Justas最简单的方法是将 PreviewMouseRightButtonUp 和 PreviewMouseRightButtonDown 事件都设置为同一个函数,并使 e.Handle = true。这种解决方案可以防止右键单击时弹出 CefSharp 的上下文菜单。
XAML:
<wpf:ChromiumWebBrowser Grid.Row="1" x:Name="Browser" Margin="30,0" IsBrowserInitializedChanged="Browser_IsBrowserInitializedChanged" PreviewMouseRightButtonDown="Browser_PreviewMouseRightButton" PreviewMouseRightButtonUp="Browser_PreviewMouseRightButton"/>
而函数:
private void Browser_PreviewMouseRightButton(object sender, MouseButtonEventArgs e)
{
e.Handled = true;
}
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
项目演示了许多功能,如果您需要其他功能,请查看它。你可以这样做...
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" />
webBrowser.PreviewMouseRightButtonDown += HandleWebBrowserPreviewMouseRightButton;
webBrowser.PreviewMouseRightButtonUp += HandleWebBrowserPreviewMouseRightButton;
private void HandleWebBrowserPreviewMouseRightButton(object sender, MouseButtonEventArgs e) {
// Preventing right-click until https://github.com/cefsharp/CefSharp/issues/1915 is fixed
e.Handled = true;
}