2009-04-23 15 views
8

Mam niestandardową funkcję UserControl, która próbuje odtworzyć funkcję autouzupełniania dla pola tekstowego. Gdy użytkownik pisze, tekst jest używany do filtrowania dostarczonej kolekcji elementów, a następnie wyskakujące okienko wyświetla ListBox z elementami pasującymi do wpisanego przez użytkownika.Ukrywanie kontroli wyskakujących okienek podczas ustawiania ostrości innego okna

Niestety, jeśli użytkownik zdecyduje się na przejście z aplikacji do innego okna (przeglądarka, MSWord, cokolwiek!), Okienko pozostaje na górze każdego innego okna!

Ponadto, jeśli przeniesie się moje okno (które obsługuje formant niestandardowy) z otwartym popup, popup pozostaje na miejscu (i nie podąża za oknem)! To trochę zabawne, ale oczywiście nie do przyjęcia zachowanie. Szukałem wokół, ale tylko znaleźć jeden post na ten temat, który przepuszczał przez dwa lata :(

+0

Od lutego 2010 r. Autocompletebox WPF ma ten problem ... :( –

Odpowiedz

13

Właściwie to nie zdawałem sobie sprawy, że mam właściwość StaysOpen zestawu podręcznego ustawionego na true.

<Popup StaysOpen="False" /> 

tak naprawdę robi mi to.

0

Według Popup documentation:

Kiedy Popup jest wyświetlany na ekranie, to nie ma się, jeśli jego położenie rodzic zostanie przeniesiony.

Więc to nie wygląda to byłby bardzo dobrym kandydatem na pole tekstowe autouzupełniania. Myślę, że klasa jest przeznaczona bardziej dla pokazywanie informacji po najechaniu na element.

+1

ComboBox używa Popup, który pozostaje w pozycji podczas ruchu ComboBox ... więc musi być możliwe – Schneider

4

Miałem ten sam problem w podobnym scenariuszu. To, co zrobiłem, to zasubskrybowałem wszystkie możliwe zdarzenia "zagubionego fokusa" kontrolki, a także otrzymałem okno, które steruje kontrolą i zasubskrybowało zdarzenia GotMouseCapture i LocationChanged. Programy obsługi zdarzeń dla wszystkich tych zdarzeń ustawiają właściwość IsOpen wyskakującego na wartość false.

można uzyskać okno hosting z tym:

parentWindow = Window.GetWindow(this); 

wszystkie inne kod jest po prostu dużo subskrypcji zdarzeń zrobić to samo.

P.S. Nie mówię, że jest to ładne lub optymalne rozwiązanie, ale działa mi dobrze :)

Powiązane problemy