У меня есть составной элемент управления, состоящий из прямоугольника и нескольких динамически создаваемых меток (динамически, потому что во время разработки я не знаю, сколько меток будет отображаться). Позиции меток (поля) оцениваются во время выполнения путем объединения всего размера элемента управления, дополнительной коллекции, передаваемой через свойство зависимостей, и высотами самих меток.
К сожалению, я не пришел к детерминированному способу определения высоты надписи до того, как один был отрендерен. ActualWidth
и ActualHeight
равны 0 до отображения меток, ширина / высота не задана, поскольку я хочу, чтобы метки сами определяли размер в зависимости от их содержимого, DesiredSize
возвращает либо 0, правильный размер или размер, превышающий реальную метку size (например, 2 или 3 раза), RenderSize
возвращает либо действительный размер, либо 0, и это похоже на то, что первая метка возвращает действительный размер, а вторая - 0.0, без какой-либо заметной причины.
Я пытался вызвать Measure()
для меток с двойным значением .PositiveInfinity прошел только для достижения ситуации, когда DesiredSize
был намного больше, чем ожидалось (все метки имеют одинаковый шрифт и состоят только из цифр, поэтому они все должен иметь более менее похожий размер, но сначала имел ~ 16 пикселей, второй - ~ 36, хотя после рендеринга RenderSize
был действительным для них обоих).
Существует ли детерминистический способ проверки желаемого размера элемента управления, основанный только на его содержимом (не на выравнивании / полях) до того, как будет отображаться на экране?