2009-04-23 9 views
8

テキストボックスの自動補完を再作成しようとするカスタムのUserControlがあります。ユーザーが入力すると、テキストが提供されたアイテムのコレクションをフィルタリングするために使用され、ユーザーが入力したものと一致するアイテムを含むListBoxがポップアップ表示されます。他のウィンドウがフォーカスしているときにポップアップコントロールを非表示にする

残念ながら、ユーザーがアプリケーションから別のウィンドウ(ブラウザ、MSWord、なにか)に切り替えることにした場合、ポップアップは他のすべてのウィンドウの上に残ります!

また、ポップアップを開いた状態で自分のウィンドウ(カスタムコントロールをホストしている)を移動すると、ポップアップがそのまま残ります(ウィンドウに従いません)!ちょっと面白いですが、明らかに受け入れられない行動です。私は周りを見回したが、わずか2年間、未回答行きました。この程度つのポストを見つけた:(

+0

2010年2月現在、WPFオートコンプリートボックスにはこの問題があります。:( –

答えて

13

実際には、trueに設定されたStaysOpenポップアップのプロパティを持っていた

<Popup StaysOpen="False" /> 

実際に私のためのトリックです。

0

Popup documentationによると:

ポップアップが画面に表示されている場合、その場合は、それ自体の位置を変更しません親は。

を再配置されるので、それはオートコンプリートテキストボックスのための非常に良い候補になるようにそれは見ていません。私は、クラスはより多くのアイテムにカーソルを合わせると情報を示すためのものだと思う。

+1

ComboBoxはポップアップを使用し、ComboBoxが移動するとその位置にとどまります。 – Schneider

4

私は同様のシナリオで同じ問題を抱えていました。私がしたことは、コントロールのすべての可能性のある "失われたフォーカス"イベントを購読し、コントロールをホストし、そのGotMouseCaptureイベントとLocationChangedイベントを購読したウィンドウを取得したことでした。これらすべてのイベントのイベントハンドラは、ポップアップのIsOpenプロパティをfalseに設定しています。

あなたはこれでホスティングウィンドウを取得することができます

parentWindow = Window.GetWindow(this); 

他のすべてのコードは、単に同じことを行うためにイベントをサブスクライブがたくさんあります。

P.S.私はそれがかなり最適なソリューションだと言っているわけではありませんが、それは私のためにうまく動作します:)

関連する問題