2009-04-23 62 views
8

我有一個自定義UserControl,它試圖爲文本框重新創建自動完成。當用戶鍵入時,文本用於過濾所提供的項目集合,然後Popup顯示一個列表框,其中的項目與用戶輸入的項目相匹配。當其他窗口焦點時隱藏彈出控件

不幸的是,如果用戶決定從應用程序中切換出來到另一個窗口(瀏覽器的MSWord,任何事情!),彈出仍然每隔窗口的頂部!

另外,如果我將我的窗口(它承載自定義控件)與彈出打開,彈出停留在地方(和不遵循窗口)!這有點有趣,但顯然不是可以接受的行爲。我環顧四周,但只找到一個職位有關這一點,無人接聽兩年:(

+0

由於2010年2月時,WPF Autocompletebox有這個問題... :( – 2010-04-24 11:59:50

回答

13

其實,我沒有意識到我彈出的StaysOpen屬性設置爲true

<Popup StaysOpen="False" /> 

實際上對我來說是訣竅。

0

按照Popup documentation

當彈出窗口顯示在屏幕上,它並沒有,如果祭出了父母被重新定位。

所以這看起來並不像這將是自動完成的文本框很好的候選人。我認爲類更多的展示,當你將鼠標懸停在某個項目信息的意思。

+1

組合框使用彈出窗口,並停留在作爲組合框移動位置..所以它必須能夠 – Schneider 2010-03-09 01:53:55

4

我在類似場景中遇到了同樣的問題。我所做的是我訂閱了控件的所有可能的「失去焦點」事件,並獲得了託管控件並訂閱其GotMouseCapture和LocationChanged事件的窗口。所有這些事件的事件處理程序都將彈出窗口的IsOpen屬性設置爲false。

你可以利用這個得到託管窗口:

parentWindow = Window.GetWindow(this); 

所有其他代碼只是很多訂閱事件做同樣的事情。

P.S.我不是說這是一個漂亮的或最佳的解決方案,但它對我來說很好:)

相關問題