2011-05-17 7 views
6

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?

Respuesta

9

Puede usar UpdateLayout para forzar un pase de medida/diseño. Después de invocar este método, ActualWidth y ActualHeight tendrán los valores correctos.

+6

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

+0

Funciona perfectamente para mí. – David

+0

Su respuesta parece ser la más cercana a la solución hasta el momento, así que lo aceptaré :) – Spook

Cuestiones relacionadas