作法:在分鏡腳本開始後加以控制How to: Control a Storyboard After It Starts

這個範例示範如何使用程式碼來控制啟動Storyboard後的。This example shows how to use code to control a Storyboard after it has started. 若要XAMLXAML在中控制分鏡腳本,請使用TriggerTriggerAction物件; 如需範例,請參閱使用事件觸發程式在啟動後控制分鏡腳本。To control a storyboard in XAMLXAML, use Trigger and TriggerAction objects; for an example, see Use Event Triggers to Control a Storyboard After It Starts.

若要啟動分鏡腳本,您Begin可以使用其方法,將分鏡腳本的動畫散發至其動畫和啟動分鏡腳本的屬性。To start a storyboard, you use its Begin method, which distributes the storyboard's animations to the properties they animate and starts the storyboard.

若要將分鏡腳本設為可Begin控制,您可以使用方法,並將true指定為第二個參數。To make a storyboard controllable, you use the Begin method and specify true as the second parameter. 接著,您可以使用分鏡腳本的互動方法來暫停、繼續、搜尋、停止、加速或減緩分鏡腳本,或將它移至其填滿期間。You can then use the storyboard's interactive methods to pause, resume, seek, stop, speed up, or slow down the storyboard, or advance it to its fill period. 以下是分鏡腳本的互動式方法清單:The following is a list of the storyboard's interactive methods:

  • Pause:暫停分鏡腳本。Pause: Pauses the storyboard.

  • Resume:繼續已暫停的分鏡腳本。Resume: Resumes a paused storyboard.

  • SetSpeedRatio:設定分鏡腳本的互動速度。SetSpeedRatio: Sets the storyboard's interactive speed.

  • Seek:搜尋腳本指定的位置。Seek: Seeks the storyboard the specified location.

  • SeekAlignedToLastTick:搜尋分鏡腳本至指定的位置。SeekAlignedToLastTick: Seeks the storyboard to the specified location. 與方法Seek不同的是,這種作業會在下一個滴答之前處理。Unlike the Seek method, this operation is processed before the next tick.

  • SkipToFill:將分鏡腳本前進到其填滿期間(如果有的話)。SkipToFill: Advances the storyboard to its fill period, if it has one.

  • Stop:停止分鏡腳本。Stop: Stops the storyboard.

在下列範例中,會使用數個分鏡腳本方法來以互動方式控制分鏡腳本。In the following example, several storyboard methods are used to interactively control a storyboard.

注意

若要查看使用觸發XAMLXAML程式來控制分鏡腳本的範例,請參閱在腳本啟動後使用事件觸發程式來控制分鏡腳本。To see an example of controlling a storyboard using triggers with XAMLXAML, see Use Event Triggers to Control a Storyboard After It Starts.

範例Example

/*
    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);          
        }         
    }
}
'
'    This example shows how to control
'    a storyboard after it has started.
'
'


Imports System.Windows
Imports System.Windows.Controls
Imports System.Windows.Media
Imports System.Windows.Shapes
Imports System.Windows.Media.Animation


Namespace Microsoft.Samples.Animation.TimingBehaviors
    Partial Public Class ControlStoryboardExample
        Inherits Page

        Private ReadOnly myStoryboard As Storyboard

        Public Sub New()

            ' Create a name scope for the page.
            NameScope.SetNameScope(Me, New NameScope())

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

            Dim myStackPanel As New StackPanel With {
                .Margin = New Thickness(20)
            }

                ' Create a rectangle.
            Dim myRectangle As New Rectangle With {
                .Width = 100,
                .Height = 20,
                .Margin = New Thickness(12, 0, 0, 5),
                .Fill = New SolidColorBrush(Color.FromArgb(170, 51, 51, 255)),
                .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.
            RegisterName("myRectangle", myRectangle)

            '
            ' Create an animation and a storyboard to animate the
            ' rectangle.
            '
            Dim myDoubleAnimation As 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.
            '
            Dim buttonPanel As New StackPanel With {
                .Orientation = Orientation.Horizontal
            }
            Dim beginButton As New Button With {
                .Content = "Begin"
            }
            AddHandler beginButton.Click, AddressOf beginButton_Clicked
            buttonPanel.Children.Add(beginButton)
            Dim pauseButton As New Button With {
                .Content = "Pause"
            }
            AddHandler pauseButton.Click, AddressOf pauseButton_Clicked
            buttonPanel.Children.Add(pauseButton)
            Dim resumeButton As New Button With {
                .Content = "Resume"
            }
            AddHandler resumeButton.Click, AddressOf resumeButton_Clicked
            buttonPanel.Children.Add(resumeButton)
            Dim skipToFillButton As New Button With {
                .Content = "Skip to Fill"
            }
            AddHandler skipToFillButton.Click, AddressOf skipToFillButton_Clicked
            buttonPanel.Children.Add(skipToFillButton)
            Dim setSpeedRatioButton As New Button With {
                .Content = "Triple Speed"
            }
            AddHandler setSpeedRatioButton.Click, AddressOf setSpeedRatioButton_Clicked
            buttonPanel.Children.Add(setSpeedRatioButton)
            Dim stopButton As New Button With {
                .Content = "Stop"
            }
            AddHandler stopButton.Click, AddressOf stopButton_Clicked
            buttonPanel.Children.Add(stopButton)
            myStackPanel.Children.Add(buttonPanel)
            Content = myStackPanel
        End Sub

        ' Begins the storyboard.
        Private Sub beginButton_Clicked(sender As Object, args As RoutedEventArgs)
            ' Specifying "true" as the second Begin parameter
            ' makes this storyboard controllable.
            myStoryboard.Begin(Me, True)

        End Sub

        ' Pauses the storyboard.
        Private Sub pauseButton_Clicked(sender As Object, args As RoutedEventArgs)
            myStoryboard.Pause(Me)

        End Sub

        ' Resumes the storyboard.
        Private Sub resumeButton_Clicked(sender As Object, args As RoutedEventArgs)
            myStoryboard.Resume(Me)

        End Sub

        ' Advances the storyboard to its fill period.
        Private Sub skipToFillButton_Clicked(sender As Object, args As RoutedEventArgs)
            myStoryboard.SkipToFill(Me)

        End Sub

        ' Updates the storyboard's speed.
        Private Sub setSpeedRatioButton_Clicked(sender As Object, args As RoutedEventArgs)
            ' Makes the storyboard progress three times as fast as normal.
            myStoryboard.SetSpeedRatio(Me, 3)

        End Sub

        ' Stops the storyboard.
        Private Sub stopButton_Clicked(sender As Object, args As RoutedEventArgs)
            myStoryboard.Stop(Me)

        End Sub



    End Class
End Namespace

另請參閱See also