2009-11-24 5 views
0

Lors de la mise à l'échelle d'un panneau à l'aide d'une transformation d'échelle, l'application doit réinitialiser le panneau à sa taille d'origine. A cet effet, un bouton de réinitialisation démarre une animation double qui anime la transformation d'échelle de sa valeur de départ à 1, ce qui signifie que le panneau aura sa valeur d'origine.DoubleAnimation/Storyboard termine deux fois et réinitialise la valeur d'animation

Visuellement, le panneau est redimensionné à la taille orignal, mais une fois l'animation terminée, l'événement complet du storyboard est déclenché deux fois, et une fois ces deux événements augmentés, la valeur de la transformée d'échelle est ramenée à la valeur avait avant l'animation.

private void ResetButton_Click(object sender, RoutedEventArgs e) 
{ 
    if (!isReseting) 
    { 
     isReseting = true; 

     this.doubleAnimation = new DoubleAnimation(1, new Duration(new TimeSpan(0,0,0, 1)), FillBehavior.Stop); 
     this.resetStoryboard = new Storyboard(); 
     resetStoryboard.Children.Add(doubleAnimation); 
     Storyboard.SetTarget(doubleAnimation, zoomSliderControl); 
     Storyboard.SetTargetProperty(doubleAnimation, new PropertyPath(RangeBase.ValueProperty)); 

     resetStoryboard.RepeatBehavior = new RepeatBehavior(1); 

     resetStoryboard.Completed += new EventHandler(ResetStoryboardCompleted); 
     resetStoryboard.Begin(); 

    } 
} 

private void ResetStoryboardCompleted(object sender, EventArgs e) 
{ 
    if (resetStoryboard != null) 
    { 
     //resetStoryboard.Stop(zoomSliderControl); 
     //resetStoryboard.Remove(zoomSliderControl); 
    } 
    resetStoryboard = null; 
    doubleAnimation = null; 
    isReseting = false; 

} 

Par exemple, si la valeur de la commande curseur (nommé zoomSliderControl) est de 1,5 avant l'animation, il anime de nouveau à 1 comme prévu, mais une fois l'événement terminé de resetStoryBoard a été soulevée deux fois il est réglé retour à 1.5 à nouveau. J'ai essayé de déboguer l'application, et c'est juste après que la seconde méthode ResetStoryboardCompleted a déterminé que la valeur est définie à sa valeur d'origine, donc je suppose que je n'ai pas configuré le storyboard ou l'animation correctement.

Répondre

1

Apparemment, le comportement par défaut des storyboards est de revenir à la valeur d'origine une fois qu'ils ont terminé ou (?) Arrêté. La solution à ce problème consistait donc à définir la valeur de zoomSliderControl à la valeur souhaitée lors de l'achèvement du storyboard.