Определите размер окна SizeToContent WPF перед его отображением - PullRequest
11 голосов
/ 27 января 2010

В моем приложении WPF есть окно, которое иногда отображается. Когда он отображается, он исчезает с помощью анимации, а когда закрывается, он исчезает. Ничего особенного, просто раскадровка, которая изменяет непрозрачность. На самом деле окно никогда по-настоящему не закрывается, прозрачность просто исчезает до 0, где она остается до тех пор, пока ее не отобразят снова.

Это окно является информативным и не всегда отображает один и тот же контент. Он рассчитан на содержимое (ширина и высота) и хорошо работает в этом отношении. Пользователь выбирает базовую область экрана для отображения (TopLeft, TopRight, Center, BottomLeft, BottomRight).

До того, как окно исчезло, содержимое обновляется. Поскольку размер окна соответствует размеру содержимого, его размер увеличивается или уменьшается. Ширина и высота могут меняться.

При позиционировании окна, скажем, в правом нижнем углу, я просто беру рабочую область экрана (ширину и высоту), а затем минус ширина / высота окна, чтобы получить нужную мне позицию сверху и слева. ,

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

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

Я попытался расположить окно в событии OnContentRendered, но оно срабатывает только один раз при создании окна, а не после обновления содержимого, когда непрозрачность установлена ​​на 0.

Кто-нибудь знает, как я могу получить точную ширину и высоту этого окна до того, как оно исчезнет?

Любая помощь будет оценена !!

1 Ответ

6 голосов
/ 27 января 2010

Я нашел ответ на свой вопрос. После обновления содержимого простой вызов метода UpdateLayout () окна вызывает обновление. Вызывает ширину и высоту, а затем возвращает точные значения.

...