【问题标题】:How to add context menu items on top of WinForm/ActiveX (hosted by WindowsFormsHost) control's own context menu in WPF如何在 WPF 中的 WinForm/ActiveX(由 WindowsFormsHost 托管)控件自己的上下文菜单上添加上下文菜单项
【发布时间】:2013-03-15 22:36:40
【问题描述】:

我们正在创建一些 WPF UserControl,它将通过使用 WindowsFormsHost 来利用一些 WinForms 或 ActiveX 控件。例如,在一个 UC 中,我们有这样的代码:

<WindowsFormsHost Name="windowsFormsHost1" Height="Auto" MinHeight="400" MinWidth="400">
    <viewer:ReportViewer x:Name="viewerInstance" />
</WindowsFormsHost>

可以在 Microsoft.Reporting.WinForms 中找到 ReportViewer。

在另一个 UC 中的代码是这样的:

<WindowsFormsHost Name="windowsFormsHost1" Height="Auto" MinHeight="400" MinWidth="400">
    <AxOWC:AxPivotTable x:Name="pivotTable" />               
</WindowsFormsHost>

可以在 AxMicrosoft.Office.Interop.Owc11 中找到 AxPivotTable 的位置

ReportViewer 和 AxPivotTable 控件都有自己的上下文菜单,其中包括许多使用功能。我想保留它们。但我还需要添加一些新功能。换句话说,我想设计一个增强的上下文菜单,默认上下文菜单是其中的一部分,而我自定义的菜单项是其他部分。

问题来了:我真的不知道在哪里添加我的自定义上下文菜单项。我试图将上下文菜单对象添加到 WindowsFormsHost。但结果是这个自定义菜单根本不会显示。我进一步将 WindowsFormsHost.ContextMenu.IsOpen 设置为 true,这一次的结果是我的自定义菜单将隐藏控件的默认上下文菜单。

我还尝试从代码隐藏中添加菜单项。例如,ReportViewer 派生自 WindowsForms(不是 WPF 程序集),它有一个名为 ContextMenu 的成员。但是当我检查 viewInstance.ContextMenu.MenuItems 时,我发现它实际上有零计数集合,这意味着默认上下文菜单在此级别上不存在。那么如何找到默认的上下文菜单并添加我的自定义菜单项呢?

【问题讨论】:

  • 您不能扩展这些上下文菜单,它们是在这些控件的代码中烘焙的。

标签: wpf contextmenu windowsformshost


【解决方案1】:

您不能将 WPF 内容与非 WPF 内容重叠(除非您使用的是 D3DImage)

【讨论】:

  • 感谢您的回复。但是你所说的“重叠”是什么意思?这是一个有点模糊的词,所以我不知道你到底是什么意思。这些控件都派生自 System.Windows.Forms.Control。所以我的想法是找到 Control 对象,它有一个名为 ContextMenu 的成员,并向其添加自定义菜单项(而不是试图制作 WPF 上下文菜单并使它们共存)。但问题是这个级别也不存在默认的上下文菜单
  • 我只是回顾你的问题。我想得越多。我将建议一种不同的方法。为什么不使用您的增强功能构建您的 winform 类型控件,而不是作为 winform 控件,然后将其嵌入到 wpf 中。
  • @TYY 你现在知道 ReportViewer 的哪个元素包含默认的 ContextMenu 了吗?因为 ReportViewer.ContextMenu == null 所以它不是这个 ContextMenu 隐藏的地方。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-12-27
  • 2015-02-17
  • 1970-01-01
  • 1970-01-01
  • 2015-01-09
相关资源
最近更新 更多