WindowsFormsHost を使用して、いくつかの WinForms または ActiveX コントロールを利用する WPF UserControl を作成しています。たとえば、ある 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 は、ContextMenu というメンバーを持つ WindowsForms (WPF アセンブリではない) から派生します。しかし、viewInstance.ContextMenu.MenuItems を確認すると、実際にはカウント コレクションがゼロであることがわかります。これは、デフォルトのコンテキスト メニューがこのレベルに存在しないことを意味します。では、デフォルトのコンテキスト メニューを見つけて、カスタマイズしたメニュー項目を追加するにはどうすればよいでしょうか?