Pregunta

Saludos!

Actualmente estoy trabajando en un proyecto Silverlight y me gustaría animar una forma de polígono sencillo (un trapecio en realidad). Específicamente, woudld gusta mover dos de los cuatro puntos dinámicamente después ocurrió algún evento. Necesito / quieren cambiar el tamaño y mover uno de los lados paralelos a otra posición.

admito que soy bastante nuevo en Silverlight y no he encontrado una fuente que me podría decir wether incluso es posible, por no hablar de cómo se puede hacer.

He utilizado animaciones antes, por lo que el concepto general de guiones gráficos y animaciones no es nuevo para mí. Pero, ¿cómo puedo mover los puntos de un polígono en una animación? ¿Hay alternativas que tienen un efecto óptico similar (por ejemplo, la animación de un camino)?
¿Hay un PropertyPath puedo usar, similar a

P3AnimBack.SetValue(Storyboard.TargetPropertyProperty, 
    new PropertyPath("(Path.Data).
        (PathGeometry.Figures)[0].(PathFigure.Segments)[0].
        (BezierSegment.Point3)"));

, como se encuentra en un Point animación en Silverlight 3 tutorial ?

Gracias a todos de antemano. :)

¿Fue útil?

Otros consejos

Como se pide en un comentario, le explico lo que finalmente se solía hacer mi animación:

animados de polilínea interpolaciones en Silverlight y más o menos directamente utilizado este código -. "robar" la clase PointCollectionInterpolator.cs

Luego tuve mi método para crear los polígonos que necesito y preparar animaciones:

private void CreatePolygon(TextBox txtbx, string prop, Color curcol)
    {
        PointCollectionInterpolator pci = new PointCollectionInterpolator();
        pci.Points1 = new PointCollection() // Start Points
            {
                new Point(...),
                new Point(...),
                new Point(...),
                new Point(...),
            };

        pci.Points2 = new PointCollection() // End Points
            {
                new Point(...),
                new Point(...),
                new Point(...),
                new Point(...),
            };

        Polygon tmpply = new Polygon();
        LayoutRoot.Children.Add(tmpply);

        tmpply.Points = pci.InterpolatedPoints;

        DoubleAnimation animpci = new DoubleAnimation();
        animpci.Duration = someDuration;
        animpci.From = 0.0;
        animpci.To = 1.0;
        Storyboard.SetTarget(animpci, pci);
        Storyboard.SetTargetProperty(animpci, new PropertyPath("(Progress)"));
        myStoryBoard.Children.Add(animpci);
    }

Y luego, en algún controlador de eventos al azar, comienzo de la animación. Además, para que pueda volver a utilizar el método, moví la colección de puntos finales en la colección de puntos de inicio y actualizar el interpolador con nuevos criterios de valoración. (Recuerde establecer el progreso a 0.0 ...) Así que cada vez que el controlador de incendios, el polígono se transforma fácilmente en una nueva.

private void SomeEventHandler(object sender, RoutedEventArgs e) 
{
    PointCollectionInterpolator polygonPCI = 
            this.referenceToPointCollectionInterpolator;
    polygonPCI.Points1 = polygonPCI.Points2;
    polygonPCI.Progress = 0.0;
    polygonPCI.Points2 = getNewEndPoints();
    myStoryBoard.Begin();
}

En retrospectiva, me gustaría cambiar los nombres de los puntos 1 y puntos2 a StartPoints y puntos finales resp. Espero que esto ayudó. :)

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top