Animatable.BeginAnimation Animatable.BeginAnimation Animatable.BeginAnimation Animatable.BeginAnimation Method

Определение

Применяет анимацию к указанному DependencyProperty.Applies an animation to the specified DependencyProperty.

Перегрузки

BeginAnimation(DependencyProperty, AnimationTimeline) BeginAnimation(DependencyProperty, AnimationTimeline) BeginAnimation(DependencyProperty, AnimationTimeline) BeginAnimation(DependencyProperty, AnimationTimeline)

Применяет анимацию к указанному DependencyProperty.Applies an animation to the specified DependencyProperty. Анимация начинается при отрисовке следующего кадра.The animation is started when the next frame is rendered. Если указанное свойство уже анимировано, используется поведение перемещения SnapshotAndReplace.If the specified property is already animated, the SnapshotAndReplace handoff behavior is used.

BeginAnimation(DependencyProperty, AnimationTimeline, HandoffBehavior) BeginAnimation(DependencyProperty, AnimationTimeline, HandoffBehavior) BeginAnimation(DependencyProperty, AnimationTimeline, HandoffBehavior)

Применяет анимацию к указанному DependencyProperty.Applies an animation to the specified DependencyProperty. Анимация начинается при отрисовке следующего кадра.The animation is started when the next frame is rendered. Если указанное свойство уже является анимированным, используется указанное поведение HandoffBehavior.If the specified property is already animated, the specified HandoffBehavior is used.

BeginAnimation(DependencyProperty, AnimationTimeline) BeginAnimation(DependencyProperty, AnimationTimeline) BeginAnimation(DependencyProperty, AnimationTimeline) BeginAnimation(DependencyProperty, AnimationTimeline)

Применяет анимацию к указанному DependencyProperty.Applies an animation to the specified DependencyProperty. Анимация начинается при отрисовке следующего кадра.The animation is started when the next frame is rendered. Если указанное свойство уже анимировано, используется поведение перемещения SnapshotAndReplace.If the specified property is already animated, the SnapshotAndReplace handoff behavior is used.

public:
 virtual void BeginAnimation(System::Windows::DependencyProperty ^ dp, System::Windows::Media::Animation::AnimationTimeline ^ animation);
public void BeginAnimation (System.Windows.DependencyProperty dp, System.Windows.Media.Animation.AnimationTimeline animation);
abstract member BeginAnimation : System.Windows.DependencyProperty * System.Windows.Media.Animation.AnimationTimeline -> unit
override this.BeginAnimation : System.Windows.DependencyProperty * System.Windows.Media.Animation.AnimationTimeline -> unit
Public Sub BeginAnimation (dp As DependencyProperty, animation As AnimationTimeline)

Параметры

dp
DependencyProperty DependencyProperty DependencyProperty DependencyProperty

Анимируемое свойство.The property to animate.

animation
AnimationTimeline AnimationTimeline AnimationTimeline AnimationTimeline

Анимация, которая используется для анимирования указанного свойства.The animation used to animate the specified property.

Если BeginTime анимации — null, любые текущие анимации будут удалены, и будет сохранено существующее значение свойства.If the animation's BeginTime is null, any current animations will be removed and the current value of the property will be held.

Если animation имеет значение null, все анимации будут удалены из свойства, а значение свойства вернется к базовому значению.If animation is null, all animations will be removed from the property and the property value will revert back to its base value.

Реализации

Комментарии

Если анимация имеет значение BeginTime , большее нуля, анимация начнется после истечения этого периода времени с момента отображения следующего кадра.If the animation has a BeginTime that is greater than zero, the animation begins after that amount of time has elapsed from the time the next frame is rendered.

BeginAnimation(DependencyProperty, AnimationTimeline, HandoffBehavior) BeginAnimation(DependencyProperty, AnimationTimeline, HandoffBehavior) BeginAnimation(DependencyProperty, AnimationTimeline, HandoffBehavior)

Применяет анимацию к указанному DependencyProperty.Applies an animation to the specified DependencyProperty. Анимация начинается при отрисовке следующего кадра.The animation is started when the next frame is rendered. Если указанное свойство уже является анимированным, используется указанное поведение HandoffBehavior.If the specified property is already animated, the specified HandoffBehavior is used.

public:
 virtual void BeginAnimation(System::Windows::DependencyProperty ^ dp, System::Windows::Media::Animation::AnimationTimeline ^ animation, System::Windows::Media::Animation::HandoffBehavior handoffBehavior);
public void BeginAnimation (System.Windows.DependencyProperty dp, System.Windows.Media.Animation.AnimationTimeline animation, System.Windows.Media.Animation.HandoffBehavior handoffBehavior);
abstract member BeginAnimation : System.Windows.DependencyProperty * System.Windows.Media.Animation.AnimationTimeline * System.Windows.Media.Animation.HandoffBehavior -> unit
override this.BeginAnimation : System.Windows.DependencyProperty * System.Windows.Media.Animation.AnimationTimeline * System.Windows.Media.Animation.HandoffBehavior -> unit

Параметры

dp
DependencyProperty DependencyProperty DependencyProperty DependencyProperty

Анимируемое свойство.The property to animate.

animation
AnimationTimeline AnimationTimeline AnimationTimeline AnimationTimeline

Анимация, которая используется для анимирования указанного свойства.The animation used to animate the specified property.

Если параметр handoffBehavior равен SnapshotAndReplace, а свойство анимации BeginTime имеет значение null, любые текущие анимации будут удалены, а текущее значение свойства будет сохранено.If handoffBehavior is SnapshotAndReplace and the animation's BeginTime is null, any current animations will be removed and the current value of the property will be held.

Если параметр handoffBehavior равен SnapshotAndReplace, а параметр animation имеет значение null, все анимации будут удалены из свойства, а значение свойства будет возвращено к исходному.If handoffBehavior is SnapshotAndReplace and animation is a null reference, all animations will be removed from the property and the property value will revert back to its base value.

Если параметр handoffBehavior равен Compose, этот метод не будет действовать при условии, что анимация или ее свойство BeginTime имеют значение null.If handoffBehavior is Compose, this method will have no effect if the animation or its BeginTime is null.

handoffBehavior
HandoffBehavior HandoffBehavior HandoffBehavior HandoffBehavior

Значение, которое указывает, как новая анимация должна взаимодействовать с любыми текущими анимациями, уже влияющими на значение свойства.A value that specifies how the new animation should interact with any current animations already affecting the property value.

Реализации

Примеры

В следующем примере показано, как применять анимацию с HandoffBehavior помощью различных параметров.The following example shows how to apply animations using different HandoffBehavior settings.

/*

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 namespace System;
using namespace System::Windows;
using namespace System::Windows::Navigation;
using namespace System::Windows::Media;
using namespace System::Windows::Media::Animation;
using namespace System::Windows::Shapes;
using namespace System::Windows::Controls;
using namespace System::Windows::Input;

namespace Microsoft {
   namespace Samples {
      namespace Animation {
         namespace LocalAnimations {
            public ref class InteractiveAnimationExample : Page {
            private: 
               TranslateTransform^ interactiveTranslateTransform;
               Border^ containerBorder;
               Ellipse^ interactiveEllipse;

            public: 
               InteractiveAnimationExample () 
               {
                  WindowTitle = "Interactive Animation Example";
                  DockPanel^ myPanel = gcnew DockPanel();
                  myPanel->Margin = Thickness(20.0);

                  containerBorder = gcnew Border();
                  containerBorder->Background = Brushes::White;
                  containerBorder->BorderBrush = Brushes::Black;
                  containerBorder->BorderThickness = Thickness(2.0);
                  containerBorder->VerticalAlignment = System::Windows::VerticalAlignment::Stretch;

                  interactiveEllipse = gcnew Ellipse();
                  interactiveEllipse->Fill = Brushes::Lime;
                  interactiveEllipse->Stroke = Brushes::Black;
                  interactiveEllipse->StrokeThickness = 2.0;
                  interactiveEllipse->Width = 25;
                  interactiveEllipse->Height = 25;
                  interactiveEllipse->HorizontalAlignment = System::Windows::HorizontalAlignment::Left;
                  interactiveEllipse->VerticalAlignment = System::Windows::VerticalAlignment::Top;

                  interactiveTranslateTransform = gcnew TranslateTransform();
                  interactiveEllipse->RenderTransform = interactiveTranslateTransform;

                  containerBorder->MouseLeftButtonDown += 
                     gcnew MouseButtonEventHandler(this, &Microsoft::Samples::Animation::LocalAnimations::InteractiveAnimationExample::border_mouseLeftButtonDown);
                  containerBorder->MouseRightButtonDown += 
                     gcnew MouseButtonEventHandler(this, &Microsoft::Samples::Animation::LocalAnimations::InteractiveAnimationExample::border_mouseRightButtonDown);
                  containerBorder->Child = interactiveEllipse;

                  myPanel->Children->Add(containerBorder);
                  this->Content = myPanel;
               };

            private: 
               // When the user left-clicks, use the 
               // SnapshotAndReplace HandoffBehavior when applying the animation.        
               void border_mouseLeftButtonDown (System::Object^ sender, System::Windows::Input::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.
                  Point targetPoint = Point();
                  targetPoint.X = clickPoint.X - interactiveEllipse->Width / 2;
                  targetPoint.Y = clickPoint.Y - interactiveEllipse->Height / 2;

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

                  DoubleAnimation^ yAnimation = gcnew DoubleAnimation(targetPoint.Y,
                     Duration(TimeSpan::FromSeconds(4)));
                  interactiveTranslateTransform->BeginAnimation(TranslateTransform::YProperty, yAnimation, HandoffBehavior::SnapshotAndReplace);

                  // Chage the color of the ellipse.
                  interactiveEllipse->Fill = Brushes::Lime;
               }

            private:
               // When the user right-clicks, use the 
               // Compose HandoffBehavior when applying the animation.
               void border_mouseRightButtonDown (System::Object^ sender, System::Windows::Input::MouseButtonEventArgs^ e)
               {
                  // Find the point where the use clicked.
                  Point clickPoint = Mouse::GetPosition(containerBorder);

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

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

                  DoubleAnimation^ yAnimation = gcnew DoubleAnimation(targetPoint.Y,
                     Duration(TimeSpan::FromSeconds(4)));

                  // Change the color of the ellipse.
                  interactiveTranslateTransform->BeginAnimation(TranslateTransform::YProperty, yAnimation, HandoffBehavior::Compose);
                  interactiveEllipse->Fill = Brushes::Orange;
               }
            };
         }
      }
   }
}
/*

   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;
            
                    
        }
        
    }
 
}
'
'
'   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.
'
'

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

Namespace Microsoft.Samples.Animation.LocalAnimations


    ' Create the demonstration.
    Public Class InteractiveAnimationExample
        Inherits Page
        
        
        Private Dim interactiveTranslateTransform As TranslateTransform  
        Private Dim WithEvents containerBorder As Border 
        Private Dim interactiveEllipse As Ellipse
        
        Public Sub New()
        
            WindowTitle = "Interactive Animation Example"
            Dim myPanel As New DockPanel()
            myPanel.Margin = New Thickness(20.0)            
    
            containerBorder = new Border()
            containerBorder.Background = Brushes.White
            containerBorder.BorderBrush = Brushes.Black
            containerBorder.BorderThickness = new Thickness(2.0) 
            containerBorder.VerticalAlignment = VerticalAlignment.Stretch
            
            interactiveEllipse = new Ellipse()
            interactiveEllipse.Fill = Brushes.Lime
            interactiveEllipse.Stroke = 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.Child = interactiveEllipse
            myPanel.Children.Add(containerBorder)
            Me.Content = myPanel
        End Sub
        

        ' When the user left-clicks, use the 
        ' SnapshotAndReplace HandoffBehavior when applying the animation.        
        Private Sub border_mouseLeftButtonDown( _
            ByVal sender As Object, ByVal e As MouseButtonEventArgs) _
            Handles containerBorder.MouseLeftButtonDown
     
        
            Dim clickPoint = Mouse.GetPosition(containerBorder)
            
            ' Set the target point so the center of the ellipse
            ' ends up at the clicked point.
            Dim targetPoint As New System.Windows.Point()
            targetPoint.X = clickPoint.X - interactiveEllipse.Width / 2
            targetPoint.Y = clickPoint.Y - interactiveEllipse.Height / 2  
            
            ' Animate to the target point.
            Dim xAnimation As _ 
                New DoubleAnimation(targetPoint.X,  _
                New Duration(TimeSpan.FromSeconds(4)))
            interactiveTranslateTransform.BeginAnimation( _
                TranslateTransform.XProperty, xAnimation, HandoffBehavior.SnapshotAndReplace)
                
            Dim yAnimation As _ 
                New DoubleAnimation(targetPoint.Y, _
                New Duration(TimeSpan.FromSeconds(4)))
            interactiveTranslateTransform.BeginAnimation( _
                TranslateTransform.YProperty, yAnimation, HandoffBehavior.SnapshotAndReplace)                

            ' Change the color of the ellipse.
            interactiveEllipse.Fill = Brushes.Lime
                    
        End Sub
        
        ' When the user right-clicks, use the 
        ' Compose HandoffBehavior when applying the animation.
        Private Sub border_mouseRightButtonDown( _
            ByVal sender As Object, ByVal e As MouseButtonEventArgs) _
            Handles containerBorder.MouseRightButtonDown
        
        
            ' Find the point where the use clicked.
            Dim clickPoint = Mouse.GetPosition(containerBorder)
            
            ' Set the target point so the center of the ellipse
            ' ends up at the clicked point.
            Dim targetPoint As New System.Windows.Point()
            targetPoint.X = clickPoint.X - interactiveEllipse.Width / 2
            targetPoint.Y = clickPoint.Y - interactiveEllipse.Height / 2
            
            ' Animate to the target point.
            Dim xAnimation As _
                New DoubleAnimation(targetPoint.X, _
                New Duration(TimeSpan.FromSeconds(4)))
            interactiveTranslateTransform.BeginAnimation( _
                TranslateTransform.XProperty, xAnimation, HandoffBehavior.Compose)
                
            Dim yAnimation As _ 
                New DoubleAnimation(targetPoint.Y, _
                New Duration(TimeSpan.FromSeconds(4))) 
            interactiveTranslateTransform.BeginAnimation( _
                TranslateTransform.YProperty, yAnimation, HandoffBehavior.Compose)   
                
            ' Change the color of the ellipse.
            interactiveEllipse.Fill = Brushes.Orange
            
                    
        End Sub
        
    End Class
 
End Namespace

Комментарии

Если анимация имеет значение BeginTime , большее нуля, анимация начнется после истечения этого периода времени с момента отображения следующего кадра.If the animation has a BeginTime that is greater than zero, the animation begins after that amount of time has elapsed from the time the next frame is rendered.

Использование создания HandoffBehaviorUsing the Compose HandoffBehavior

При Storyboardприменении, AnimationTimelineили AnimationClock к свойству с помощью Compose HandoffBehaviorвсе Clock объекты, ранее связанные с этим свойством, продолжают потреблять системные ресурсы; система времени не будет Удалите эти часы автоматически.When you apply a Storyboard, AnimationTimeline, or AnimationClock to a property using the Compose HandoffBehavior, any Clock objects previously associated with that property continue to consume system resources; the timing system will not remove these clocks automatically.

Чтобы избежать проблем с производительностью при применении большого количества часов с помощью Compose, следует удалить составные часы из анимированного свойства после их завершения.To avoid performance issues when you apply a large number of clocks using Compose, you should remove composing clocks from the animated property after they complete. Есть несколько способов удаления часов.There are several ways to remove a clock.

  • Чтобы удалить все часы из свойства, используйте ApplyAnimationClock(DependencyProperty, AnimationClock) метод или BeginAnimation(DependencyProperty, AnimationTimeline) анимированного объекта.To remove all clocks from a property, use the ApplyAnimationClock(DependencyProperty, AnimationClock) or BeginAnimation(DependencyProperty, AnimationTimeline) method of the animated object. Укажите свойство, которое анимируется как первый параметр, а null в качестве второго.Specify the property being animated as the first parameter, and null as the second. Это удалит из свойства все часы анимации.This will remove all animation clocks from the property.

  • Чтобы AnimationClock удалить определенное значение из списка часов, Controller используйте свойство ClockControllerобъекта AnimationClock для получения, а затем вызовите Remove метод класса ClockController.To remove a specific AnimationClock from a list of clocks, use the Controller property of the AnimationClock to retrieve a ClockController, then call the Remove method of the ClockController. Обычно это делается в Completed обработчике событий для часов.This is typically done in the Completed event handler for a clock. Обратите внимание, что только корневые часы могут управляться ClockController Controller ; свойство дочернего часов будет возвращать nullзначение.Note that only root clocks can be controlled by a ClockController; the Controller property of a child clock will return null. Обратите внимание, Completed что событие не будет вызываться, если фактическая длительность часов бесконечно.Note also that the Completed event will not be called if the effective duration of the clock is forever. В этом случае пользователю нужно будет определить, когда следует вызывать Remove.In that case, the user will need to determine when to call Remove.

В основном это проблема для анимации объектов, имеющих длинное время жизни.This is primarily an issue for animations on objects that have a long lifetime. Когда объект собирается как мусор, его часы отсоединяются и также собираются как мусор.When an object is garbage collected, its clocks will also be disconnected and garbage collected.

Дополнительные сведения об объектах часов см. в разделе Общие сведения о анимации и системе управления временем.For more information about clock objects, see the Animation and Timing System Overview.

Применяется к