有没有办法使用 Wpf (C#) 更改 Web 浏览器的上下文菜单

Posted

技术标签:

【中文标题】有没有办法使用 Wpf (C#) 更改 Web 浏览器的上下文菜单【英文标题】:Is there any way to change the Context Menu of a Web browser using Wpf (C#) 【发布时间】:2010-09-19 07:42:05 【问题描述】:

我想更改 Web 浏览器控件中提供的默认上下文菜单中的菜单项。我已经尝试过:webbrowser.contextmenu = mycontextmenu。 没有改变。有没有办法做到这一点?

【问题讨论】:

看看***.com/questions/31411328/… 【参考方案1】:

简短的回答是否定的。详情请见this thread。

【讨论】:

【参考方案2】:

简短的回答是肯定的。

见this article on codeproject。

Here is another (shorter) article on codeproject

【讨论】:

那篇文章都是WinForms。你有可以在 WPF 中工作的代码吗? 它应该在 WinForms 和 WPF 中工作,因为它依赖于自定义 mshtml。注意:在我的回答中添加了指向另一篇文章的新链接。【参考方案3】:

我正在尝试做同样的事情。我阅读了大约 5 篇 codeproject 文章(顺便说一下,它们有点旧),但无法正确理解 COM 互操作部分。可能是因为我不会用 C++ 编程。

但后来我发现这个页面http://www.pinvoke.net/default.aspx/Interfaces/IDocHostUIHandler.html 似乎很有希望。它包含一个声称提供您想要的功能的 c# 接口。但是我仍然无法让它一直工作,所以如果其他人可以为这个答案做出贡献,我将不胜感激。

由于我不知道您对 c# 有多熟悉(顺便说一句,我几乎是个菜鸟),所以我将在此处发布一些额外的步骤,使用 VS2008。添加 Microsoft.mshtml 作为对您项目的引用,创建一个新的 c# 界面,并在界面顶部添加额外的 3 个“使用”语句。

using System.Windows;
using System.Runtime.InteropServices;
using mshtml;

并粘贴接口定义的代码。然后让 WebBrowser 容器实现这个接口和所有的方法。这就是我到现在为止的距离。我仍在寻找将浏览器事件重定向到容器的方法。

【讨论】:

【参考方案4】:

答案 - 是的。 webbrowser 控件中有一个设置: .IsWebBrowserContextMenuEnabled = false;

将此设置为 false 将禁用 IE 上下文菜单,允许您设置的任何一个来统治根。简单的..

【讨论】:

以上是关于有没有办法使用 Wpf (C#) 更改 Web 浏览器的上下文菜单的主要内容,如果未能解决你的问题,请参考以下文章

c#编程wpf按钮边框带有白边!

有没有办法从 C# WPF 应用程序中刷新 DNS 缓存? (在 XP、Vista、Win7 上)

在 C# WPF 中发出哔声

以编程方式使用 C# 更改网格面板边框颜色 - WPF

C# WPF - 组合框

JetBrains Rider 不显示 C# WPF 异常