4

我正在使用 WPF WebBrowser 控件来显示 PDF。我想禁用上下文菜单。

我已经尝试过以下 -

  1. 禁用 Internet Explorer 控件中的上下文菜单-

    在构造函数中,添加了以下内容 -

    webBrowser.LoadCompleted +=new LoadCompletedEventHandler(webBrowser_LoadCompleted);
    
    // Event Handler
    public void webBrowser_LoadCompleted(object sender, NavigationEventArgs e )
    {
        webBrowser.ContextMenu = null;
        var t = webBrowser.Document as System.Windows.Forms.HtmlDocument;
        // t is always coming as null, even though I can clearly see the pdf in the web browser control.
        if(t != null)
        {
            t.ContextMenuShowing += new System.Windows.Forms.HtmlElementEventHandler(t_ContextMenuShowing);
        }
    }
    
  2. 还检查了http://social.msdn.microsoft.com/forums/en-US/wpf/thread/7c283faf-16c8-4b4e-a362-f292e3032abb/

    使用设置注册表的方法 - HKEY_LOCAL_MACHINE\Software\Policies\Microsoft\Internet Explorer\Restrictions\NoBrowserContextMenu 为 DWORD 1。

    当我设置注册表时,PDF 无法正确显示。

    另外,由于我使用 PDF 显示,我无法在正文中设置 -

    oncontextmenu="return false;"
    
  3. 无法设置IsWebBrowserContextMenuEnabled,因为我正在使用 WPF Web 浏览器控件。

4

4 回答 4

0

您可以将 Windows 窗体 WebBrowser 包装为可绑定并以简单的方式禁用上下文菜单(以及对其他属性的访问):

public class WindowsFormsWebBrowser : WindowsFormsHost
{
    public static readonly DependencyProperty HtmlProperty =
        DependencyProperty.Register(
            "Html",
            typeof(string),
            typeof(WindowsFormsWebBrowser),
            new PropertyMetadata(string.Empty, OnHtmlChanged, null));

    public static readonly DependencyProperty IsContentMenuEnabledProperty =
        DependencyProperty.Register(
        "IsContentMenuEnabled",
        typeof(bool),
        typeof(WindowsFormsWebBrowser),
        new PropertyMetadata(true, OnIsContextMenuEnabledChanged));

    private readonly System.Windows.Forms.WebBrowser webBrowser = new System.Windows.Forms.WebBrowser();

    public WindowsFormsWebBrowser()
    {
        Child = webBrowser;
    }

    public string Html
    {
        get { return GetValue(HtmlProperty) as string; }
        set { SetValue(HtmlProperty, value); }
    }

    public bool IsContentMenuEnabled
    {
        get { return (bool)GetValue(IsContentMenuEnabledProperty); }
        set { SetValue(IsContentMenuEnabledProperty, value); }
    }

    private static void OnHtmlChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
    {
        var browser = d as WindowsFormsWebBrowser;

        if (browser == null)
        {
            return;
        }

        browser.webBrowser.DocumentText = (string)e.NewValue;
    }

    private static void OnIsContextMenuEnabledChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
    {
        var browser = d as WindowsFormsWebBrowser;

        if (browser == null)
        {
            return;
        }

        browser.webBrowser.IsWebBrowserContextMenuEnabled = (bool)e.NewValue;
    }
}

这里是在 WPF 项目中引用 Windows 窗体控件的步骤。

于 2014-07-26T14:41:51.417 回答
0

这可能是因为 PDF 可视化工具想要显示它自己的上下文菜单。

您看到的是哪个上下文菜单?IE 之一还是 PDF 可视化工具之一?

我也会尝试使用System.Windows.Forms.WebBrowser(您可以在 WPF 中使用它)。我在 WPF 应用程序中使用它是因为它具有比 WPF 更多的功能。

于 2013-02-14T18:56:01.387 回答
0

这是一个解决方案:

private void WebBrowser_LoadCompleted(object sender, System.Windows.Navigation.NavigationEventArgs e)
{
    ((WebBrowser)sender).InvokeScript("eval",
        "$(document).contextmenu(function() { return false; });");
}
于 2017-03-09T16:28:48.447 回答
-2

只需使用

// Disable the Context menu inside the web browser
webBrowser1.IsWebBrowserContextMenuEnabled = false;

我在 Windows 应用程序中试过这个

于 2013-09-26T12:37:27.713 回答