WPF прикрепить всплывающее окно с элементом управления - PullRequest
4 голосов
/ 12 ноября 2009

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

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

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

Ответы [ 4 ]

4 голосов
/ 08 апреля 2010

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

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

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

2 голосов
/ 28 марта 2012

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

1 голос
/ 30 июня 2010

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

Примерно так:

всплывающее окно. Горизонтальное смещение + = 0,01

всплывающее окно. Горизонтальное смещение - = 0,01

0 голосов
/ 04 апреля 2010

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

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

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