Partager via


Comment : contrôler une table de montage séquentiel après son démarrage

Mise à jour : novembre 2007

Cet exemple indique comment utiliser le code pour contrôler un Storyboard après son démarrage. Pour contrôler une table de montage séquentiel en langage XAML, utilisez les objets Trigger et TriggerAction. Pour obtenir un exemple, consultez Comment : utiliser des déclencheurs d'événements pour contrôler une table de montage séquentiel après son démarrage.

Pour démarrer une table de montage séquentiel, vous utilisez sa méthode Begin, qui distribue les animations de la table de montage séquentiel aux propriétés animées et démarre la table de montage séquentiel.

Pour pouvoir contrôler une table de montage séquentiel, vous utilisez la méthode Begin et spécifiez la valeur true comme deuxième paramètre. Vous pouvez ensuite utiliser les méthodes interactives de la table de montage séquentiel pour suspendre, reprendre, rechercher, arrêter, accélérer ou ralentir la table de montage séquentiel, ou encore pour l'avancer à sa période de remplissage. La liste ci-dessous répertorie les méthodes interactives de la table de montage séquentiel :

  • Pause : suspend la table de montage séquentiel.

  • Resume : reprend une la table de montage séquentiel suspendue.

  • SetSpeedRatio : définit la vitesse interactive de la table de montage séquentiel.

  • Seek : recherche la table de montage séquentiel à partir de l'emplacement spécifié.

  • SeekAlignedToLastTick : recherche la table de montage séquentiel jusqu'à l'emplacement spécifié. Contrairement à la méthode Seek, cette opération est traitée avant le battement suivant.

  • SkipToFill : fait avancer la table de montage séquentiel à la fin de sa période de remplissage, le cas échéant.

  • Stop : arrête la table de montage séquentiel.

Dans l'exemple suivant, plusieurs méthodes de table de montage séquentiel sont utilisées pour contrôler une table de montage séquentiel de manière interactive.

Remarque : pour obtenir un exemple de contrôle d'une table de montage séquentiel à l'aide de déclencheurs en langage XAML, consultez Comment : utiliser des déclencheurs d'événements pour contrôler une table de montage séquentiel après son démarrage.

Exemple

/*
    This example shows how to control
    a storyboard after it has started.

*/

using System;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Media;
using System.Windows.Shapes;
using System.Windows.Media.Animation;


namespace Microsoft.Samples.Animation.TimingBehaviors
{
    public partial class ControlStoryboardExample : Page
    {

        private Storyboard myStoryboard;

        public ControlStoryboardExample()
        {

            // Create a name scope for the page.
            NameScope.SetNameScope(this, new NameScope());        

            this.WindowTitle = "Controlling a Storyboard";
            this.Background = Brushes.White;

            StackPanel myStackPanel = new StackPanel();
            myStackPanel.Margin = new Thickness(20);

            // Create a rectangle.
            Rectangle myRectangle = new Rectangle();
            myRectangle.Width = 100;
            myRectangle.Height = 20;
            myRectangle.Margin = new Thickness(12,0,0,5);
            myRectangle.Fill = new SolidColorBrush(Color.FromArgb(170, 51, 51, 255));
            myRectangle.HorizontalAlignment = HorizontalAlignment.Left;
            myStackPanel.Children.Add(myRectangle);

            // Assign the rectangle a name by 
            // registering it with the page, so that
            // it can be targeted by storyboard
            // animations.
            this.RegisterName("myRectangle", myRectangle);           

            //
            // Create an animation and a storyboard to animate the
            // rectangle.
            //
            DoubleAnimation myDoubleAnimation = 
                new DoubleAnimation(100, 500, new Duration(TimeSpan.FromSeconds(5)));            
            Storyboard.SetTargetName(myDoubleAnimation, "myRectangle");
            Storyboard.SetTargetProperty(myDoubleAnimation, new PropertyPath(Rectangle.WidthProperty));
            myStoryboard = new Storyboard();
            myStoryboard.Children.Add(myDoubleAnimation);

            //
            // Create some buttons to control the storyboard
            // and a panel to contain them.
            //
            StackPanel buttonPanel = new StackPanel();
            buttonPanel.Orientation = Orientation.Horizontal;
            Button beginButton = new Button();
            beginButton.Content = "Begin";
            beginButton.Click += new RoutedEventHandler(beginButton_Clicked);            
            buttonPanel.Children.Add(beginButton);
            Button pauseButton = new Button();
            pauseButton.Content = "Pause";
            pauseButton.Click +=new RoutedEventHandler(pauseButton_Clicked);
            buttonPanel.Children.Add(pauseButton);
            Button resumeButton = new Button();
            resumeButton.Content = "Resume";
            resumeButton.Click +=new RoutedEventHandler(resumeButton_Clicked);
            buttonPanel.Children.Add(resumeButton);
            Button skipToFillButton = new Button();
            skipToFillButton.Content = "Skip to Fill";
            skipToFillButton.Click +=new RoutedEventHandler(skipToFillButton_Clicked);
            buttonPanel.Children.Add(skipToFillButton);
            Button setSpeedRatioButton = new Button();
            setSpeedRatioButton.Content = "Triple Speed";
            setSpeedRatioButton.Click +=new RoutedEventHandler(setSpeedRatioButton_Clicked);
            buttonPanel.Children.Add(setSpeedRatioButton);
            Button stopButton = new Button();
            stopButton.Content = "Stop";
            stopButton.Click +=new RoutedEventHandler(stopButton_Clicked);
            buttonPanel.Children.Add(stopButton);
            myStackPanel.Children.Add(buttonPanel);           
            this.Content = myStackPanel;            
        }

        // Begins the storyboard.
        private void beginButton_Clicked(object sender, RoutedEventArgs args)
        {
            // Specifying "true" as the second Begin parameter
            // makes this storyboard controllable.
            myStoryboard.Begin(this, true);          

        }

        // Pauses the storyboard.
        private void pauseButton_Clicked(object sender, RoutedEventArgs args)
        {
             myStoryboard.Pause(this);          

        }

        // Resumes the storyboard.
        private void resumeButton_Clicked(object sender, RoutedEventArgs args)
        {
             myStoryboard.Resume(this);          

        }     

        // Advances the storyboard to its fill period.
        private void skipToFillButton_Clicked(object sender, RoutedEventArgs args)
        {
             myStoryboard.SkipToFill(this);          

        } 

        // Updates the storyboard's speed.
        private void setSpeedRatioButton_Clicked(object sender, RoutedEventArgs args)
        {
            // Makes the storyboard progress three times as fast as normal.
            myStoryboard.SetSpeedRatio(this, 3);          

        }           

        // Stops the storyboard.
        private void stopButton_Clicked(object sender, RoutedEventArgs args)
        {
             myStoryboard.Stop(this);          

        }         



    }
}

Voir aussi

Tâches

Comment : utiliser des déclencheurs d'événements pour contrôler une table de montage séquentiel après son démarrage