2009-05-15 4 views
3

クリックするとポップアップが開くボタンがあります。ポップアップは、より多くのボタンを含むサブメニューです。サブメニューのいずれかのボタンをクリックすると、ポップアップが閉じます。また、ユーザーがポップアップの外側をクリックすると、ポップアップが閉じるようにしたい。また、大部分の画面は、OpenGL Winフォームコントロールを表示するWindowsFormsHostに取り込まれることに注意することも重要です。閉じる方法WPFのサブメニューとして使用されるポップアップ

サブメニューボタンをクリックしたときにポップアップを閉じることができました。それらのボタンのクリックハンドラ内で私はポップアップを閉じます。しかし、他の場所をクリックしたときにポップアップを閉じると、問題に遭遇しました。

物事は私が試してみた:

falseにPopUp.StaysOpenを設定します。これは、画面上の他の場所をクリックするとポップアップが閉じられるという点で機能します。しかし、Winフォームコントロールでは、これまでのアクションを実行するためにポップアップを閉じるためにクリックする必要があるようです。これは非常に望ましくない。

私は、ポップアップを開き、StaysOpenをtrueに設定するボタンのLostFocusイベントを処理しようとしました。これは、ポップアップをクリックしても、Winフォームコントロールの2回目のクリックは必要ありません。今問題は、LostFocusイベントが処理され、ポップアップ上の任意のボタンをクリックする前にポップアップが閉じられたことです。これにより、サブメニューが使用できなくなります。

答えて

1

おそらく、WPFのフォーカスシステムで問題が発生している可能性があります。 WPFには、WinFormsと標準のWin32ウィンドウとは完全に別の独自のフォーカスシステムがあります。

WinFormsとWPFの間でフォーカスを切り替えると、正しく発射されないイベントがいくつかあると思います。

WinFormsウィンドウのWndProcまたはClickイベントを無効にし、ポップアップで手動でIsOpenをfalseに設定することをお勧めします。

これを修正するのはこれだけです。

関連する問題