BeginAnimation 메서드 (DependencyProperty, AnimationTimeline, HandoffBehavior)
콘텐츠의 테이블 축소
콘텐츠의 테이블 확장
이 문서는 기계 번역을 이용하여 번역되었습니다. 문서를 영문으로 보려면 영문 확인란을 선택하세요. 마우스 포인터를 텍스트 위로 이동시켜 팝업 창에서 영문 텍스트를 표시할 수도 있습니다.
번역
영문

Animatable.BeginAnimation 메서드 (DependencyProperty, AnimationTimeline, HandoffBehavior)

 

지정된 DependencyProperty에 애니메이션을 적용합니다.애니메이션은 다음 프레임이 렌더링되면 시작됩니다.지정된 속성에 이미 애니메이션이 적용되어 있으면 지정된 HandoffBehavior가 사용됩니다.

네임스페이스:   System.Windows.Media.Animation
어셈블리:  PresentationCore.dll의 PresentationCore

public void BeginAnimation(
	DependencyProperty dp,
	AnimationTimeline animation,
	HandoffBehavior handoffBehavior
)

매개 변수

dp

애니메이션을 적용할 속성입니다.

animation

지정된 속성에 애니메이션을 적용하는 데 사용되는 애니메이션입니다.

handoffBehaviorSnapshotAndReplace이고 애니메이션의 BeginTimenull이면 현재 애니메이션은 제거되며 속성의 현재 값이 유지됩니다.

handoffBehaviorSnapshotAndReplace이고 animationnull 참조이면 모든 애니메이션이 속성에서 제거되며 속성 값이 기준 값으로 되돌아갑니다.

handoffBehaviorCompose인 경우 애니메이션 또는 해당 BeginTimenull이면 이 메서드를 사용해도 아무런 영향이 없습니다.

handoffBehavior

새 애니메이션이 이미 속성 값에 영향을 주고 있는 현재 애니메이션과 상호 작용하는 방법을 지정하는 값입니다.

애니메이션의 BeginTime이 0보다 크면 애니메이션은 다음 프레임이 렌더링된 시간에서 해당 시간이 경과한 후에 시작됩니다.

Compose HandoffBehavior를 사용하여 Storyboard, AnimationTimeline 또는 AnimationClock을 속성에 적용하는 경우 이전에 해당 속성에 연결된 Clock 개체에서 계속 시스템 리소스를 사용하며 타이밍 시스템이 Clock을 자동으로 제거하지 않습니다.

Compose를 사용하여 많은 수의 Clock을 적용하는 경우 성능 문제를 피하려면 Clock을 완성한 후 애니메이션 속성에서 구성 중인 Clock을 제거해야 합니다.Clock을 제거하는 방법은 여러 가지가 있습니다.

이것은 주로 수명이 긴 개체의 애니메이션에 나타나는 문제입니다. 개체에서 가비지가 수집되면 해당 Clock에서도 연결이 끊어지고 가비지가 수집됩니다.

Clock 개체에 대한 자세한 내용은 애니메이션 및 타이밍 시스템 개요를 참조하십시오.

다음 예제에서는 서로 다른 HandoffBehavior 설정을 사용하여 애니메이션을 적용하는 방법을 보여 줍니다.

/*

   This sample animates the position of an ellipse when 
   the user clicks within the main border. If the user
   left-clicks, the SnapshotAndReplace HandoffBehavior
   is used when applying the animations. If the user
   right-clicks, the Compose HandoffBehavior is used
   instead.

*/

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

namespace Microsoft.Samples.Animation.LocalAnimations
{

    // Create the demonstration.
    public class InteractiveAnimationExample : Page {


        private TranslateTransform interactiveTranslateTransform;   
        private Border containerBorder;
        private Ellipse interactiveEllipse;

        public InteractiveAnimationExample()
        {

            WindowTitle = "Interactive Animation Example";
            DockPanel myPanel = new DockPanel();
            myPanel.Margin = new Thickness(20.0);            

            containerBorder = new Border();
            containerBorder.Background = System.Windows.Media.Brushes.White;
            containerBorder.BorderBrush = System.Windows.Media.Brushes.Black;
            containerBorder.BorderThickness = new Thickness(2.0); 
            containerBorder.VerticalAlignment = VerticalAlignment.Stretch;

            interactiveEllipse = new Ellipse();
            interactiveEllipse.Fill = System.Windows.Media.Brushes.Lime;
            interactiveEllipse.Stroke = System.Windows.Media.Brushes.Black;
            interactiveEllipse.StrokeThickness = 2.0;
            interactiveEllipse.Width = 25;
            interactiveEllipse.Height = 25;
            interactiveEllipse.HorizontalAlignment = HorizontalAlignment.Left;
            interactiveEllipse.VerticalAlignment = VerticalAlignment.Top;

            interactiveTranslateTransform = new TranslateTransform();
            interactiveEllipse.RenderTransform = 
                interactiveTranslateTransform;

            containerBorder.MouseLeftButtonDown += 
                new MouseButtonEventHandler(border_mouseLeftButtonDown);
            containerBorder.MouseRightButtonDown += 
                new MouseButtonEventHandler(border_mouseRightButtonDown);                

            containerBorder.Child = interactiveEllipse;
            myPanel.Children.Add(containerBorder);
            this.Content = myPanel;
        }


        // When the user left-clicks, use the 
        // SnapshotAndReplace HandoffBehavior when applying the animation.        
        private void border_mouseLeftButtonDown(object sender, MouseButtonEventArgs e)
        {

            System.Windows.Point clickPoint = Mouse.GetPosition(containerBorder);

            // Set the target point so the center of the ellipse
            // ends up at the clicked point.
            System.Windows.Point targetPoint = new System.Windows.Point();
            targetPoint.X = clickPoint.X - interactiveEllipse.Width / 2;
            targetPoint.Y = clickPoint.Y - interactiveEllipse.Height / 2;  

            // Animate to the target point.
            DoubleAnimation xAnimation = 
                new DoubleAnimation(targetPoint.X, 
                new Duration(TimeSpan.FromSeconds(4)));
            interactiveTranslateTransform.BeginAnimation(
                TranslateTransform.XProperty, xAnimation, HandoffBehavior.SnapshotAndReplace);

            DoubleAnimation yAnimation = 
                new DoubleAnimation(targetPoint.Y, 
                new Duration(TimeSpan.FromSeconds(4))); 
            interactiveTranslateTransform.BeginAnimation(
                TranslateTransform.YProperty, yAnimation, HandoffBehavior.SnapshotAndReplace);                

            // Change the color of the ellipse.
            interactiveEllipse.Fill = System.Windows.Media.Brushes.Lime;

        }

        // When the user right-clicks, use the 
        // Compose HandoffBehavior when applying the animation.
        private void border_mouseRightButtonDown(object sender, MouseButtonEventArgs e)
        {

            // Find the point where the use clicked.
            System.Windows.Point clickPoint = Mouse.GetPosition(containerBorder);

            // Set the target point so the center of the ellipse
            // ends up at the clicked point.
            System.Windows.Point targetPoint = new System.Windows.Point();
            targetPoint.X = clickPoint.X - interactiveEllipse.Width / 2;
            targetPoint.Y = clickPoint.Y - interactiveEllipse.Height / 2;



            // Animate to the target point.
            DoubleAnimation xAnimation = 
                new DoubleAnimation(targetPoint.X, 
                new Duration(TimeSpan.FromSeconds(4)));
            interactiveTranslateTransform.BeginAnimation(
                TranslateTransform.XProperty, xAnimation, HandoffBehavior.Compose);

            DoubleAnimation yAnimation = 
                new DoubleAnimation(targetPoint.Y, 
                new Duration(TimeSpan.FromSeconds(4))); 
            interactiveTranslateTransform.BeginAnimation(
                TranslateTransform.YProperty, yAnimation, HandoffBehavior.Compose);   

            // Change the color of the ellipse.
            interactiveEllipse.Fill = System.Windows.Media.Brushes.Orange;


        }

    }

}

.NET Framework
3.0 이후에 사용 가능
맨 위로 이동
표시:
© 2016 Microsoft