다음을 통해 공유


방법: 이미 시작된 Storyboard 제어

업데이트: 2007년 11월

이 예제에서는 이미 시작된 Storyboard를 코드를 사용하여 제어하는 방법을 보여 줍니다. XAML에서는 TriggerTriggerAction 개체를 사용하여 Storyboard를 제어합니다. 예제를 보려면 방법: Storyboard를 시작한 후 이벤트 트리거를 사용하여 제어를 참조하십시오.

Storyboard를 시작하려면 Begin 메서드를 사용합니다. 이 메서드는 애니메이션 효과를 적용할 속성에 Storyboard의 애니메이션을 배포한 다음 Storyboard를 시작합니다.

Storyboard를 제어 가능하게 하려면 Begin 메서드를 사용하고 두 번째 매개 변수를 true로 지정합니다. 그런 후 Storyboard의 대화형 메서드를 사용하여 Storyboard를 일시 중지, 다시 시작, 이동, 중지, 빠르게 재생 또는 느리게 재생하거나, 전체 기간의 끝으로 진행할 수 있습니다. 다음은 Storyboard의 대화형 메서드 목록입니다.

  • Pause: Storyboard를 일시 중지합니다.

  • Resume: 일시 중지한 Storyboard를 다시 시작합니다.

  • SetSpeedRatio: Storyboard의 속도를 대화형으로 설정합니다.

  • Seek: Storyboard의 지정한 위치로 이동합니다.

  • SeekAlignedToLastTick: Storyboard의 지정한 위치로 이동합니다. Seek 메서드와 달리 이 작업은 다음 틱 전에서만 처리됩니다.

  • SkipToFill: Storyboard를 해당 전체 기간(있는 경우)의 끝으로 진행합니다.

  • Stop: Storyboard를 중지합니다.

다음 예제에서는 몇 가지 Storyboard 메서드를 사용하여 대화형으로 Storyboard를 제어합니다.

참고: XAML을 사용하여 트리거로 Storyboard를 제어하는 예제를 보려면 방법: Storyboard를 시작한 후 이벤트 트리거를 사용하여 제어를 참조하십시오.

예제

/*
    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);          

        }         



    }
}

참고 항목

작업

방법: Storyboard를 시작한 후 이벤트 트리거를 사용하여 제어