2009-07-27 15 views
12

Tengo un montón de puntos de datos que me gustaría unir en dos direcciones a los puntos en un lienzo.Cómo cambiar el origen x, y de lienzo a la esquina inferior izquierda y voltear las coordenadas y?

Los puntos suponen que los valores y mayores se reflejan en una dirección hacia arriba como la mayoría de los gráficos matemáticos.

¿Cómo cambio el origen x, y del lienzo en la esquina inferior izquierda e invierto su interpretación de la coordenada y?

(Me gustaría permanecer en XAML)

+0

Hola, sé que esto es viejo, pero ¿lo conseguiste trabajando en dos direcciones? Estoy tratando de seleccionar el (los) punto (s) haciendo clic en él –

Respuesta

22
<Canvas> 
    <Canvas.LayoutTransform> 
     <ScaleTransform ScaleX="1" ScaleY="-1" CenterX=".5" CenterY=".5" /> 
    </Canvas.LayoutTransform> 
</Canvas> 
+3

Gracias por esto, pero ¿no son ScaleX, CentreX y CenterY redundantes? Simplemente usando ScaleY = "- 1" parece hacer el truco. Además, otros deben tener en cuenta que esto también volteará cualquier texto al revés. –

+3

sí, las otras propiedades son redundantes, pero es convencional (por lo que he visto) incluir esas propiedades. Y sí, cambiará el texto, pero si solo está dibujando puntos debería estar bien. si necesita dibujar texto, puede dibujarlo en un segundo Lienzo transparente que se encuentre en la parte superior del gráfico Lienzo – kenwarner

+0

@qntmfred, cualquier implementación de ejemplo de implementación de texto. porque el sistema de puntos también afectará la colocación de texto. – RobinAtTech

0

Si utiliza enlace de datos se puede utilizar un TypeConvertor, pero para eso se tienen que ir fuera de la XAML y lo que necesita saber el tamaño del lienzo de antemano.

+0

Hola, ¿qué quieres decir con enlace de datos? Estoy tratando de seleccionar puntos haciendo clic en ellos. TypeConverter tiene algo que ver con esto? –

0

Probablemente crearía un panel personalizado en lugar de usar Canvas y le daría las propiedades adjuntas que tengan sentido para sus necesidades. Aquí está un ejemplo de implementación de un panel personalizado:

http://blog.boschin.it/articles/silverlight-radialpanel.aspx

Algo así como lienzo es muy simple, ya que no tiene que hacer mucho en la medida y organizar las anulaciones.

También es posible heredar de Canvas y reemplazar ArrangeOverride, no lo he intentado pero puede funcionar.

+0

Bill, ¿no dice qué está mal con el uso de Canvas? –

+0

Bueno, no veo cómo puedes hacer esto con un Lienzo recto, si lo escalas -1 en Y, todo se volteará. Supongo que también puedes escalar todos los elementos -1. –

0

Probé ampliamente el método ScaleTransform: No funciona. Solo cambia una de las 2 coordenadas, nunca ambas. Esto, sin embargo, funciona como se anuncia:

<Canvas Name="myCanvas" Width="0" Height="0" RenderTransform="1 0 0 -1 0 0" 
    HorizontalAlignment="Center" VerticalAlignment="Center" > 
Cuestiones relacionadas