8
votes

Obtenez la valeur actuelle d'une double animation

J'ai une planche d'histoire où je fais un rectangle remonte à une aiguille dans une jauge de voiture MPH. Donc, je le fais aller de 0 à 60 ans et je veux pouvoir obtenir sa valeur actuelle pendant son évolution afin que je puisse utiliser cette valeur pour créer une jauge numérique.

Comment puis-je obtenir la valeur actuelle du début à la fin d'une double animation? J'ai quelque chose comme ceci: xxx

quand il fait pivoter le rectangle vers le haut, j'ai essayé d'obtenir cet angle mais il vient de retourner zéro.


1 commentaires

Je pense que cela aiderait, si vous avez montré comment vous allez utiliser exactement la valeur angulaire modifiée. H.b. J'ai montré comment lier l'élément UI à l'angle de changement, j'ai montré comment obtenir l'angle à tout moment par programme. Si aucune de ces réponses ne fonctionne pour vous, vous devez ajouter plus de détails à votre question.


4 Réponses :


2
votes

Vous n'êtes pas sûr de ce qui est exactement le problème auquel vous êtes confronté, mais je viens de vérifier et ce code vous montrera l'angle actuel: xxx pré>

Si vous avez besoin d'accéder à une autre classe d'une autre classe, vous pouvez l'exposer via des propriétés telles que: p>

public Double CurrentAngle
{
    get { return rt.Angle; }
}


9 commentaires

Comment puis-je continuer à obtenir la valeur actuelle sans avoir à cliquer sur un bouton? Si j'ajoute que var x = rt.ange; au bas de l'animation, il revient juste zéro.


J'ai des cases à cocher pour simuler des engrenages afin que le code ci-dessus est dans une case à cocher Void private2_Checké (expéditeur d'objet, routéventargs e) Comment puis-je continuer à obtenir sa valeur actuelle car elle revient simplement zéro


@icelated - pas sûr de comprendre. Si vous avez besoin d'une zone de texte continuellement mise à jour avec un nouvel angle, utilisez la liaison comme H.B. montré. Si vous avez besoin d'y accéder à la programmation informatique, il suffit d'accéder à la propriété Angle lorsque vous en avez besoin.


Pour une raison quelconque, il retourne toujours zéro


@ALEX AZA: Je pense que je pense que x = rt.angle ferait référence x référence à l'angle. Bien sûr que ce n'est pas le cas et juste après le code de démarrage de l'animation, l'angle est toujours 0 (et X sera toujours 0 après cette assignation)


Exactement HB - Comment puis-je obtenir la valeur actuelle alors? J'ai besoin de le faire dans le code derrière si possible


@iCelated - S'il est privé, vous pouvez l'exposer via une propriété. J'ai montré cela dans ma réponse.


@iCelated: Dans les réponses qui ne sont pas la personne qui vous adressez à votre commentaire doit commencer par @ ou la personne que vous avez talonnée ne sera pas notifiée; Juste pour que vous sachiez, car je n'ai pas reçu ce message (pas que cela importe ici depuis que Alex pourrait également répondre à cela)


@icelated, j'ai le même problème ici (Silverlight). l'avez-vous résolu éventuellement?



3
votes

Vous devez faire quelque chose de mal, considérez cet exemple:

rt.BeginAnimation(RotateTransform.AngleProperty, new DoubleAnimation(0, 60, TimeSpan.FromSeconds(1), FillBehavior.HoldEnd));


18 commentaires

Y a-t-il une solution t-on cette valeur dans le code derrière sans reliure? ne sonne pas comme ça


Quel serait le but? Si vous avez un code de code, vous ne pouvez toujours accéder à la valeur actuelle qu'au moment de l'exécution de la pièce de code, que voudriez-vous faire? Bien sûr, vous pouvez créer une propriété dédiée et animer uniquement pour lier la transformation et l'affichage numérique sur cette propriété.


J'espérais juste que je puisse faire des segments comme un écran de 7 segment. Je veux passer d'analogique au numérique


Eh bien, je simulant une jauge de voiture. Il a un rectangle pour une aiguille que je le fais de monte en fonction de l'histoire. Ça marche très bien. Cependant, je souhaite également pouvoir passer au numérique pour afficher le régime de ce type comme dans un 7 segments comme une horloge numérique. J'ai donc besoin d'obtenir la valeur afin que je puisse exécuter un commutateur dessus.


Ensuite, vous devriez avoir une propriété de vitesse dans votre modèle et les affichages doivent représenter cette valeur de différentes manières.


Je l'ai récemment fait avec une horloge analogique et j'ai fait une horloge numérique mais elle était basée sur le temps et était facile à faire les segments.


Je ne sais pas comment faire une propriété de vitesse - alors il n'y a donc aucun moyen de le faire de l'animation alors?


Eh bien, juste quelques propriétés, probablement de type INT que vous pouvez animer (pas nécessairement avec les animations intégrées). Si ce n'est pas une dépendanceProperty, le modèle doit implémenter inotifyPropertychanged < / code> afin que vous puissiez le lier.


Je ne comprends toujours pas bien comment vous allez transformer la vitesse en segments mais vous pouvez faire une liaison avec un ValueConverter pour transformer votre vitesse en autre chose.


Je sais ce que vous dites avec inoticypropertychangned, j'ai fait cela avec le temps. J'ai eu l'heure actuelle et la divisez-la à 2 variables et a utilisé un commutateur pour basculer la visibilité sur les segments. J'espérais faire la même chose avec la valeur actuelle de l'animation.


Je ne peux pas changer la direction que je suis allé avec le storyboard pour alimenter la jauge analogique de la voiture mph, donc je ne peux pas faire de segments pour le numérique alors


Si vous ne pouvez pas changer cela, vous êtes maintenant bloqué avec succès avec une mauvaise conception.


On m'a dit que je pouvais définir un x: nom sur la rotatétransform et obtenir cette valeur directement. et double à = (rotateleft.children [0] comme doubleinanimation) .to; mais il n'y a pas de rotateleft, je pense que c'est en silverlight


Je suppose que je peux essayer d'avoir l'angle du rectangle en tournant dans le code derrière


Vous pouvez obtenir l'angle de la transformation, au pire dont vous avez besoin de lancer le rendutransform.


Comment puis-je obtenir l'angle de la transformation? rt?


rt.angle ou si vous n'avez aucune référence directe (rect.RenderTransform comme rotatétransform) .Angleterre .


merci j'ai eu la valeur angulaire. ne sais pas si je peux l'utiliser ou non, mais merci pour tout. Je finirai probablement pas juste juste pour une boîte de texte



0
votes

Bonsoir. J'ai eu un problème similaire mais avec la position d'un élément lors de l'animation de son mouvement. Je l'ai résolu dans mon cas en utilisant le temps. Cette approche est basée sur la connaissance du temps écoulé après l'animation. Disons que nous avons ce code de classe de l'élément: xxx pré>

par exemple, nous devons connaître l'emplacement actuel après un certain temps. Alors commençons. P>

var currentLocation = new Point(Location.X + currentShift.X, Location.Y + currentShift.Y);


2 commentaires

Si vous avez une nouvelle question, veuillez le demander en cliquant sur le bouton Poser une question . Inclure un lien vers cette question si cela aide à fournir un contexte.


Je n'ai pas écrit au début mais c'est une réponse bien sûr. Merci pour le conseil et désolé pour le gâchis.



1
votes

Malgré certaines affiches qui affirment ici sinon, j'ai également remarqué qu'il est difficile d'accéder à la valeur actuelle d'une propriété animée alors que l'animation est en cours. Voici une belle solution que j'ai utilisée pour utiliser des animations WPF pour interpoler les valeurs au fil du temps de mon modèle.

var doubleValue = new AnimatedDoubleValue();
var animation=new DoubleAnimation() { From=0, To=100, Duration=TimeSpan.FromSeconds(1) };
animation.SetValue(Storyboard.DesiredFrameRateProperty, 30);
doubleValue.BeginAnimation(AnimatedDoubleValue.ValueProperty, animation, HandoffBehavior.SnapshotAndReplace);


2 commentaires

Je ne sais pas pourquoi cela a été voté. Après 3 jours de recherche, c'est un excellent point de départ pour une classe d'animation pour obtenir les valeurs des animations


Ceci est la solution correcte pour attraper la valeur d'animation sur une animation calculée. En utilisant oldvalue sa possible pour calculer la fraction / puissance.