Question

Bonjour!

Je travaille actuellement sur un projet Silverlight et je voudrais animer une forme simple polygone (un trapézoïdal en fait). Plus précisément, je woudld aime déplacer deux des quatre points de façon dynamique après un certain événement a eu lieu. Je dois / redimensionner et déplacer l'un des côtés parallèles à une autre position.

Je dois admettre que je suis assez nouveau pour Silverlight et n'ont pas trouvé une source qui pourrait me dire wether il est même possible, sans parler de la façon dont il peut être fait.

Je l'ai utilisé des animations avant, de sorte que le concept général de storyboards et animations n'est pas nouveau pour moi. Mais comment puis-je déplacer les points d'un polygone dans une animation? Y at-il des solutions de rechange qui ont un effet optique similaire (par exemple animant un chemin)?
Y at-il un PropertyPath je peux utiliser, similaire à

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

, que l'on trouve dans un point d'animation dans Silverlight 3 tutoriel ?

Merci tout à l'avance. :)

Était-ce utile?

La solution

Je ne sais pas quoi que ce soit sur Silverlight, ou des animations dans .NET en général, mais Charles Petzold fait quelque chose de semblable:

Autres conseils

Comme l'a demandé dans un commentaire, j'expliquer ce que je finalement l'habitude de faire mon animation:

Je follwed sur animés Polyligne interpolations Silverlight et plus ou moins directement utilisé ce code -. « voler » la classe PointCollectionInterpolator.cs

Alors j'avais ma méthode pour créer des polygones dont j'ai besoin et préparer des animations:

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);
    }

Et puis dans certains gestionnaire d'événements au hasard, je commence l'animation. De plus, donc je peux réutiliser la méthode, je me suis déplacé les points d'extrémité collecte dans les points de départ de collecte et de mettre à jour le interpolateur avec de nouveaux points d'extrémité. (Rappelez-vous la mise en progrès à 0.0 ...) Donc, chaque fois que les feux de gestionnaire, le polygone se transforme de façon transparente dans un nouveau.

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

Avec le recul, je changerais les noms de points1 et points2 à StartPoints et EndPoints resp. Espérons que cela a aidé. :)

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top