Note

Access to this page requires authorization. You can try signing in or .

Access to this page requires authorization. You can try .

Animatable.BeginAnimation Method

Definition

Namespace:
System.Windows.Media.Animation
Assembly:
PresentationCore.dll

Important

Some information relates to prerelease product that may be substantially modified before it’s released. Microsoft makes no warranties, express or implied, with respect to the information provided here.

Applies an animation to the specified DependencyProperty.

Overloads

Name Description
BeginAnimation(DependencyProperty, AnimationTimeline)

Applies an animation to the specified DependencyProperty. The animation is started when the next frame is rendered. If the specified property is already animated, the SnapshotAndReplace handoff behavior is used.

BeginAnimation(DependencyProperty, AnimationTimeline, HandoffBehavior)

Applies an animation to the specified DependencyProperty. The animation is started when the next frame is rendered. If the specified property is already animated, the specified HandoffBehavior is used.

BeginAnimation(DependencyProperty, AnimationTimeline)

Applies an animation to the specified DependencyProperty. The animation is started when the next frame is rendered. 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)

Parameters

dp
DependencyProperty

The property to animate.

animation
AnimationTimeline

The animation used to animate the specified property.

If the animation's BeginTime is null, any current animations will be removed and the current value of the property will be held.

If animation is null, all animations will be removed from the property and the property value will revert back to its base value.

Implements

Remarks

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.

Applies to

BeginAnimation(DependencyProperty, AnimationTimeline, HandoffBehavior)

Applies an animation to the specified DependencyProperty. The animation is started when the next frame is rendered. 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
Public Sub BeginAnimation (dp As DependencyProperty, animation As AnimationTimeline, handoffBehavior As HandoffBehavior)

Parameters

dp
DependencyProperty

The property to animate.

animation
AnimationTimeline

The animation used to animate the specified property.

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.

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.

If handoffBehavior is Compose, this method will have no effect if the animation or its BeginTime is null.

handoffBehavior
HandoffBehavior

A value that specifies how the new animation should interact with any current animations already affecting the property value.

Implements

Examples

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

Remarks

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.

Using the Compose HandoffBehavior

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.

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.

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.

Applies to


Feedback

Was this page helpful?