Как добавить элементы контекстного меню поверх собственного контекстного меню элемента управления WinForm/ActiveX (размещенного на WindowsFormsHost) в WPF
Мы создаем некоторый WPF UserControl, который будет использовать некоторые элементы управления WinForms или ActiveX с помощью WindowsFormsHost. Например, в одном UC у нас есть такой код:
<WindowsFormsHost Name="windowsFormsHost1" Height="Auto" MinHeight="400" MinWidth="400">
<viewer:ReportViewer x:Name="viewerInstance" />
</WindowsFormsHost>
где ReportViewer можно найти в Microsoft.Reporting.WinForms.
В другом UC код выглядит так:
<WindowsFormsHost Name="windowsFormsHost1" Height="Auto" MinHeight="400" MinWidth="400">
<AxOWC:AxPivotTable x:Name="pivotTable" />
</WindowsFormsHost>
где AxPivotTable можно найти в AxMicrosoft.Office.Interop.Owc11
Оба элемента управления ReportViewer и AxPivotTable имеют свое собственное контекстное меню, которое включает в себя многие функции использования. Я хотел бы сохранить их. Но мне также нужно добавить некоторые новые функции. Другими словами, я хочу создать расширенное контекстное меню, частью которого является контекстное меню по умолчанию, а настраиваемые пункты меню - это другие части.
И тут возникает проблема: я действительно не знаю, куда добавить свои настраиваемые пункты контекстного меню. Я попытался добавить объект контекстного меню в WindowsFormsHost. Но в результате это индивидуальное меню не будет отображаться вообще. Кроме того, я устанавливаю для WindowsFormsHost.ContextMenu.IsOpen значение true, и на этот раз в результате мое настроенное меню будет затенять контекстное меню элементов управления по умолчанию.
Я также пытаюсь добавить пункты меню из кода. Например, ReportViewer является производным от WindowsForms (не сборка WPF), которая имеет член с именем ContextMenu. Но когда я проверяю viewInstance.ContextMenu.MenuItems, я вижу, что на самом деле он имеет коллекцию нулей, что означает, что контекстное меню по умолчанию не существует на этом уровне. Так как же я могу найти контекстное меню по умолчанию и добавить свои собственные пункты меню?
1 ответ
Вы не можете перекрывать содержимое WPF с содержимым не WPF (если только вы не используете D3DImage)