Win32アプリケーションで非モーダルウィンドウとして表示するWPFダイアログがあります。 window.Show()を呼び出すとウィンドウが正しく表示され、すべてのマウスイベントが正しく処理されますが、すべてのキーボードイベントは親のWin32ウィンドウによって処理されるため、ユーザーがテキストボックスにフォーカスを移動しても、親のWin32ウィンドウに表示されます。Win32アプリケーションでホストされる非モーダルWPFダイアログはキーボードイベントを受け取りません
これはWinForms/WPF interopの既知の問題であると思われ、その場合はダイアログを表示する前にElementHost.EnableModelessKeyboardInterop
を呼び出すことで修正されます。これにより、キーボードイベントがインターセプトされ、WPFダイアログに適切にルーティングされるように、新しいメッセージフィルタがWinFormsメッセージループに追加されます。
残念ながら私のホストアプリケーションはWinFormsアプリケーションではないため、EnableModelessKeyboardInterop
を呼び出すオプションはありません。 Win32アプリケーションで同様のことをする方法はありますか?
そのお返事ありがとうございます。私はそれが必要なようなものを考え出した。私の問題は、Win32ホストが実際にはExcelであることです:(つまり、残念ながら私はメッセージループを制御できません... – ndeslandes
あなたのWPFウィンドウがいつ作成され、閉じられたか知っていれば、自分で作ることができるかもしれませんWPFウィンドウが開かれている間にWin32のメッセージループが発生します。これにより、独自のフィルタリングを追加することができます。これが残りのExcelにどのように影響するかわかりません。 – Andy
ありがとうございます。危険なので、私はExcelがそれにどのように反応するかはわかりません。今のところ私はWPF Dialogモーダルを維持しています... – ndeslandes