如何在WPF中的WinForm / ActiveX(由WindowsFormsHost托管)控件自己的上下文菜单之上添加上下文菜单项

时间:2013-03-15 11:39:41

标签: wpf contextmenu windowsformshost

我们正在创建一些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时,我发现它实际上有ZERO计数集合,这意味着此级别上不存在默认的上下文菜单。那么如何找到默认的上下文菜单并添加我的自定义菜单项呢?

1 个答案:

答案 0 :(得分:0)

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