Определение размера элемента управления перед процессом рендеринга - PullRequest
8 голосов
/ 17 мая 2011

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

К сожалению, я не пришел к детерминированному способу определения высоты надписи до того, как один был отрендерен. ActualWidth и ActualHeight равны 0 до отображения меток, ширина / высота не задана, поскольку я хочу, чтобы метки сами определяли размер в зависимости от их содержимого, DesiredSize возвращает либо 0, правильный размер или размер, превышающий реальную метку size (например, 2 или 3 раза), RenderSize возвращает либо действительный размер, либо 0, и это похоже на то, что первая метка возвращает действительный размер, а вторая - 0.0, без какой-либо заметной причины.

Я пытался вызвать Measure() для меток с двойным значением .PositiveInfinity прошел только для достижения ситуации, когда DesiredSize был намного больше, чем ожидалось (все метки имеют одинаковый шрифт и состоят только из цифр, поэтому они все должен иметь более менее похожий размер, но сначала имел ~ 16 пикселей, второй - ~ 36, хотя после рендеринга RenderSize был действительным для них обоих).

Существует ли детерминистический способ проверки желаемого размера элемента управления, основанный только на его содержимом (не на выравнивании / полях) до того, как будет отображаться на экране?

1 Ответ

13 голосов
/ 17 мая 2011

Вы можете использовать UpdateLayout для принудительного прохождения меры / макета.После вызова этого метода ActualWidth и ActualHeight будут иметь правильные значения.

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