WPF присоединить всплывающее окно с элементом управления

У меня есть сценарий, когда я показываю всплывающее окно на моем элементе управления. Я могу сделать это с помощью PlacementTarget, Position и т. Д.

Моя проблема в том, что когда я изменяю размер окна и перемещаю его в другое место на рабочем столе, всплывающее окно остается неподвижным, что означает, что оно не перемещается с элементом управления, установленным как PlacementTarget. Мне удалось скрыть это в случае, если другое окно получит фокус. Но не смог пристроить его с моим контролем.

Как я могу решить эту проблему? Есть ли другой такой контроль?


person viky    schedule 12.11.2009    source источник
comment
У Джона Кристмана (вверху) правильная идея. Я опубликовал ответ на аналогичный вопрос, который показывает этот подход в контексте. Он обрабатывает случаи перемещения или изменения размера окна.   -  person Jason Frank    schedule 28.03.2012


Ответы (3)


Если вы посмотрите на все элементы управления WPF из MS, их всплывающее окно в ControlTemplate автоматически закрывается, когда вы щелкаете где-нибудь за пределами Control. (например, ComboBox)

За это отвечает это свойство: StaysOpen="False"

Самый простой способ - определить Window, который будет выглядеть как Popup, и привязать его свойства позиции к вашему элементу управления с помощью Converter, добавив к нему несколько пикселей.

person PaN1C_Showt1Me    schedule 08.04.2010

Это не идеальное решение, но если у вас есть событие для работы, в данном случае Resize или LocationChanged, вы можете заставить всплывающее окно переместиться, изменив одно из его смещений и вернув его обратно.

Что-то вроде этого:

popup.HorizontalOffset + = 0,01

popup.HorizontalOffset - = 0,01

person John Christman    schedule 30.06.2010

Я не думаю, что вы получите желаемое поведение без использования Popup и некоторой обработки.

Если у вас есть PlacementTarget, вы можете получить окно, за которым он должен следовать, верно? Поэтому, когда отображается всплывающее окно, следите за движением окна, содержащего PlacementTarget, и соответствующим образом настройте всплывающее окно. Popup является производным от Window, поэтому у него должны быть свойства Left и Top.

person Steven    schedule 04.04.2010