我正在使用WPF WebBrowser控件来显示PDF。我想禁用上下文菜单。
我已经尝试了以下内容 -
Disable context menu in Internet Explorer control -
在构造函数中,添加了以下内容 -
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);
}
}
同时选中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。
当我设置regisrty时,PDF无法正常显示。
另外,由于我使用PDF来显示,我无法设置 - 在体内 -
oncontextmenu="return false;"
无法设置IsWebBrowserContextMenuEnabled
,因为我正在使用WPF网络浏览器控件。
答案 0 :(得分:0)
可能是因为PDF可视化工具想要显示它自己的上下文菜单。
您看到了哪个上下文菜单? IE或其中一个PDF可视化工具?
我也会尝试使用System.Windows.Forms.WebBrowser(您可以在WPF中使用它)。我在WPF应用程序中使用它,因为它具有比WPF更多的功能。
答案 1 :(得分: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;
}
}
Here在WPF项目中引用Windows窗体控件的步骤。
答案 2 :(得分:0)
这是一个解决方案:
private void WebBrowser_LoadCompleted(object sender, System.Windows.Navigation.NavigationEventArgs e)
{
((WebBrowser)sender).InvokeScript("eval",
"$(document).contextmenu(function() { return false; });");
}
答案 3 :(得分:-2)
只需使用
// Disable the Context menu inside the web browser
webBrowser1.IsWebBrowserContextMenuEnabled = false;
我在Windows应用程序中试过这个