2010-01-27 8 views
10

Tengo una ventana en mi aplicación WPF que se muestra ocasionalmente. Cuando se muestra, se desvanece con una anotación, y cuando se cierra, se desvanece. Nada elegante, solo un guión gráfico que modifica la opacidad. En realidad, la ventana nunca está realmente cerrada, la opacidad simplemente se desvaneció a 0, donde permanece hasta que se muestre de nuevo.Determine el tamaño de la ventana de SizeToContent WPF antes de que se represente

Esta ventana es una ventana informativa y no siempre muestra el mismo contenido. Tiene el tamaño del contenido (ancho y alto) y funciona bien en ese sentido. El usuario elige el área básica de la pantalla para que se muestre (TopLeft, TopRight, Center, BottomLeft, BottomRight).

Antes de que la ventana se desvanezca en el contenido se actualiza. Como la ventana está dimensionada para contenido, aumenta o disminuye en tamaño. El ancho y la altura pueden cambiar.

Al posicionar la ventana, digamos, en la esquina inferior derecha, simplemente tomo el área de trabajo de la pantalla (ancho y alto) y luego menos el ancho/alto de la ventana para obtener la posición superior e izquierda que necesitar.

La lógica funciona, pero el problema que tengo es la altura de la ventana y el ancho no devuelve el tamaño que es después de que se actualizó el contenido, pero está devolviendo el tamaño que era la última vez que se mostró. Estoy asumiendo que esto se debe a que aún no se ha procesado con el nuevo contenido.

Esto me causa dolor debido a que la ventana es más grande que la última vez que, obviamente, se extiende fuera de la pantalla.

I intentado posicionar la ventana en caso OnContentRendered, pero esto sólo se dispara una vez cuando se crea la ventana, no después de que el contenido se ha actualizado, cuando la opacidad se establece en 0.

¿Alguien tiene alguna idea ¿Cómo puedo obtener un ancho y alto exactos de esta ventana antes de que se desvanezca?

¡Cualquier ayuda sería apreciada!

Respuesta

5

Encontré la respuesta a mi propia pregunta. Después de actualizar el contenido, una simple llamada al método UpdateLayout() de la ventana fuerza una actualización. Las llamadas al ancho y alto devuelven valores precisos.

+1

UpdateLayout() no siempre funciona. Quiero decir que no siempre se puede obtener ActualHeight o ActualWidth justo después de UpadteLayout() llame al – MikroDel

+2

Si resolvió su problema, puede marcar su respuesta como la solución. –

Cuestiones relacionadas