Скрытие всплывающего окна, когда другое окно находится в фокусе - PullRequest
8 голосов
/ 23 апреля 2009

У меня есть пользовательский UserControl, который пытается воссоздать автозаполнение для текстового поля. Когда пользователь вводит текст, текст используется для фильтрации предоставленной коллекции элементов, а затем во всплывающем окне отображается ListBox с элементами, которые соответствуют тому, что набрал пользователь.

К сожалению, если пользователь решит переключиться с приложения на другое окно (браузер, MSWord, что угодно!), Всплывающее окно останется поверх любого другого окна!

Кроме того, если я переместлю свое окно (в котором размещен пользовательский элемент управления) с открытым всплывающим окном, оно останется на месте (и не последует за окном)! Это довольно забавно, но явно неприемлемо. Я посмотрел вокруг, но нашел только один пост об этом, который оставался без ответа в течение двух лет: (

Ответы [ 3 ]

15 голосов
/ 28 апреля 2009

На самом деле, я не осознавал, что для свойства StaysOpen всплывающего окна установлено значение true.

<Popup StaysOpen="False" />

на самом деле делает трюк для меня.

4 голосов
/ 23 апреля 2009

У меня была такая же проблема в похожем сценарии. Я подписался на все возможные события «потерянного фокуса» элемента управления, а также получил окно, в котором находится элемент управления, и подписался на его события GotMouseCapture и LocationChanged. Обработчики всех этих событий устанавливают для свойства IsOpen всплывающего окна значение false.

Окно хостинга можно получить с помощью:

parentWindow = Window.GetWindow(this);

Весь остальной код просто подписывается на события, чтобы сделать то же самое.

P.S. Я не говорю, что это симпатичное или оптимальное решение, но оно прекрасно работает для меня:)

0 голосов
/ 23 апреля 2009

Согласно всплывающей документации :

Когда всплывающее окно отображается на экране, оно не переустанавливается, если его родитель переставлен.

Так что, похоже, это не очень хороший кандидат для автозаполнения текстового поля. Я думаю, что класс предназначен больше для показа информации, когда вы наводите курсор на элемент.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...