2010-08-22 9 views
1

Je suis en train de jouer avec une horloge dans silverlight. J'essaye de mettre en place le code d'animation par programme parce que je veux réutiliser le même code pour chacune des trois aiguilles (et je ne pense pas pouvoir le faire avec un seul storyboard dans xaml). Je passe à la fois l'angle vers lequel je veux que l'aiguille actuelle tourne et la transformation de rotation pour cette main. A partir de cette rotation, j'obtiens l'angle de départ.Créer une animation Silverlight par programmation en accélérant en C#

Lorsque je cours l'horloge, les aiguilles de l'horloge bougent (l'aiguille des secondes se déplace au bon endroit chaque seconde, etc.) mais les animations ne semblent pas réellement animées. Ils vont juste du début à la fin instantanément.

Pourquoi l'animation ne se produit-elle pas correctement?

Répondre

1

Le problème de saut est probablement le retard dans le démarrage d'un storyboard qui veut afficher les changements en moins d'une seconde. Au moment où le storyboard se prépare à afficher, il dit essentiellement "oh ... c'est après 1 seconde maintenant, où devrait je suis maintenant". Vous êtes mieux avec des storyboards plus longs.

Je ne sais pas combien de contrôle vous sur votre horloge vouloir, mais en ce qui concerne l'utilisation d'un seul story-board, ici ... GOES

Je ne savais pas du problème global que vous essayez de résoudre, mais l'exemple suivant utilise un storyboard simple pour exécuter les 3 aiguilles d'une horloge. Le seul problème que j'avais était que l'intervalle de temps maximum que je pourrais spécifier pour l'aiguille des heures (en XAML), sans erreur d'analyse, est 23:59:59.

<Storyboard x:Name="SecondHandStoryboard" RepeatBehavior="Forever"> 
     <DoubleAnimation Duration="0:1:0" To="360" Storyboard.TargetProperty="(UIElement.RenderTransform).(CompositeTransform.Rotation)" Storyboard.TargetName="SecondHand" /> 
     <DoubleAnimation Duration="1:0:0" To="360" Storyboard.TargetProperty="(UIElement.RenderTransform).(CompositeTransform.Rotation)" Storyboard.TargetName="MinuteHand"/> 
     <DoubleAnimation Duration="23:59:59" To="360" Storyboard.TargetProperty="(UIElement.RenderTransform).(CompositeTransform.Rotation)" Storyboard.TargetName="HourHand"/> 
    </Storyboard> 

, je voulais ajouter un solide « tick » animation à la seconde main, mais n'ont pas compris comment obtenir la rotation « par » storyboards pour travailler. Fondamentalement, utilisez un storyboard répété de 6 secondes par seconde avec un assouplissement abrupt (vous continuerez à chercher dans ce problème).

En tout cas, j'espère que cela vous sera utile.

+0

Donc, la question est, voulez-vous une Rolex ou un knock-off? Parfois, un knock-off est juste trop difficile à créer. :) – Marc

Questions connexes