2009-05-25 18 views
17

Me estoy volviendo ciego a XAML, me temo. Estoy desarrollando una aplicación MS Surface y tengo una elipse dentro de ScatterViewItem (un contenedor que un usuario final puede cambiar de tamaño). Me gustaría mantener la elipse en un círculo (ancho == altura) y mantenerla lo más grande posible (se debe tomar el valor más bajo de ancho/alto del SVI para las propiedades de ancho/alto de la elipse).En XAML, ¿cómo puedo mantener una elipse como un círculo?

Se prefiere una solución XAML única (utilizando activadores de propiedades o similares).

Su ayuda es muy apreciada como siempre.

Respuesta

15

¿Sería un simple Viewbox hacer el truco? P.ej.

<Viewbox xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    HorizontalAlignment="Center" 
    VerticalAlignment="Center"> 
    <Canvas Width="100" Height="100"> 
     <Ellipse Fill="Red" Width="100" Height="100" /> 
    </Canvas> 
</Viewbox> 

El Viewbox escalará su contenido para rellenar el área de la Viewbox, y por defecto lo hace el escalado proporcionalmente. Las alineaciones horizontales y verticales especificadas mantienen el Ellipse centrado cuando no se puede estirar al tamaño completo (debido a la escala proporcional).

+1

Briljant! Briljant (necesito al menos 15 caracteres para decírselo) –

5
<Ellipse x:Name="anEllipse" Width={Binding Path=ActualHeight ElementName=anEllipse} /> 

Probablemente pueda salirse con la suya sin mencionar esto si también hizo una vinculación relativa.

+2

¿Qué pasa si la altura del cuadro delimitador es mayor que el ancho? En ese caso, quiero la altura = real ancho. –

+0

En este caso, necesita escribir código para hacer esto, es decir, desea realizar un tamaño codicioso que mantenga la relación de aspecto (como la forma en que lo hace un reproductor de película, que cambia de qué lado basa su tamaño en función de qué eje es más grande) –

+0

Eso es lo que pensé. Muy mal, pero no hay problema. Gracias –

28

tropecé con esta pregunta hace unos minutos y encontré una solución mucho mejor que @ Pablo Betts (me gustaría comentar en su respuesta si pudiera, pero no puedo)

Usted puede simplemente utilizar <Ellipse Stretch="Uniform" /> para obtener un circulo

Fuente: http://forums.silverlight.net/t/160615.aspx

+2

Esta es la mejor solución con diferencia. – flyingfisch

Cuestiones relacionadas