Tengo un control compuesto que consiste en un rectángulo y unas pocas etiquetas creadas dinámicamente (dinámicamente, porque durante el diseño no sé cuántas etiquetas se mostrarán). Las posiciones (márgenes) de las etiquetas se evalúan durante el tiempo de ejecución al combinar el tamaño de control completo, la colección adicional pasada a través de la propiedad de dependencia y la altura de las etiquetas mismas.Determinar el tamaño de un control antes del proceso de representación
Desafortunadamente, no llegué a una forma determinística de determinar la altura de la etiqueta antes de que se procesara. ActualWidth
y ActualHeight
son 0 antes de que se muestren las etiquetas, ancho/alto no está configurado, porque deseo que las etiquetas se dimensionen basándose en sus contenidos, DesiredSize
devuelve 0, tamaño correcto o tamaño que exceda el tamaño de etiqueta real (como 2 o 3 veces), RenderSize
devuelve el tamaño válido o 0 y es como la primera etiqueta devuelve el tamaño válido y la segunda - 0.0, sin ningún motivo evidente.
He intentado llamar a Measure()
en las etiquetas con double.PositiveInfinity pasado solo para llegar a la situación, cuando DesiredSize
fue mucho más grande de lo esperado (todas las etiquetas tienen la misma fuente y solo consisten en números, por lo que todos tendrán más tamaño menos similar, pero primero tenía ~ 16 píxeles, segundo - ~ 36, aunque después de la representación, RenderSize
era válido para ambos).
¿Hay un determinista manera de comprobar el tamaño deseado de control, basándose únicamente en su contenido (no en la alineación/Márgenes) antes de mostrarla en la pantalla?
Lo probé un poco más y encontré algunas situaciones, cuando, incluso después de llamar a UpdateLayout tanto en el principal como en las propias etiquetas, ActualHeight de las etiquetas es 0.0. Todavía parece que no hay una forma determinista para determinar la altura del objeto antes de procesar ... – Spook
Funciona perfectamente para mí. – David
Su respuesta parece ser la más cercana a la solución hasta el momento, así que lo aceptaré :) – Spook