Auf Englisch lesen

Teilen über


Animatable.BeginAnimation Methode

Definition

Wendet eine Animation auf die angegebene DependencyPropertyan.

Überlädt

BeginAnimation(DependencyProperty, AnimationTimeline)

Wendet eine Animation auf die angegebene DependencyPropertyan. Die Animation wird gestartet, wenn der nächste Frame gerendert wird. Wenn die angegebene Eigenschaft bereits animiert ist, wird das SnapshotAndReplace Handoffverhalten verwendet.

BeginAnimation(DependencyProperty, AnimationTimeline, HandoffBehavior)

Wendet eine Animation auf die angegebene DependencyPropertyan. Die Animation wird gestartet, wenn der nächste Frame gerendert wird. Wenn die angegebene Eigenschaft bereits animiert ist, wird die angegebene HandoffBehavior verwendet.

BeginAnimation(DependencyProperty, AnimationTimeline)

Wendet eine Animation auf die angegebene DependencyPropertyan. Die Animation wird gestartet, wenn der nächste Frame gerendert wird. Wenn die angegebene Eigenschaft bereits animiert ist, wird das SnapshotAndReplace Handoffverhalten verwendet.

C#
public void BeginAnimation (System.Windows.DependencyProperty dp, System.Windows.Media.Animation.AnimationTimeline animation);

Parameter

dp
DependencyProperty

Die zu animierende Eigenschaft.

animation
AnimationTimeline

Die Animation, die zum Animieren der angegebenen Eigenschaft verwendet wird.

Wenn die BeginTime der Animation nullist, werden alle aktuellen Animationen entfernt, und der aktuelle Wert der Eigenschaft wird gehalten.

Wenn animationnullist, werden alle Animationen aus der Eigenschaft entfernt, und der Eigenschaftswert wird wieder auf den Basiswert zurückgesetzt.

Implementiert

Hinweise

Wenn die Animation eine BeginTime hat, die größer als 0 ist, beginnt die Animation nach ablaufen dieser Zeitspanne ab dem Zeitpunkt, zu dem der nächste Frame gerendert wird.

Gilt für:

.NET Framework 4.8.1 und andere Versionen
Produkt Versionen
.NET Framework 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
Windows Desktop 3.0, 3.1, 5, 6, 7, 8, 9

BeginAnimation(DependencyProperty, AnimationTimeline, HandoffBehavior)

Wendet eine Animation auf die angegebene DependencyPropertyan. Die Animation wird gestartet, wenn der nächste Frame gerendert wird. Wenn die angegebene Eigenschaft bereits animiert ist, wird die angegebene HandoffBehavior verwendet.

C#
public void BeginAnimation (System.Windows.DependencyProperty dp, System.Windows.Media.Animation.AnimationTimeline animation, System.Windows.Media.Animation.HandoffBehavior handoffBehavior);

Parameter

dp
DependencyProperty

Die zu animierende Eigenschaft.

animation
AnimationTimeline

Die Animation, die zum Animieren der angegebenen Eigenschaft verwendet wird.

Wenn handoffBehaviorSnapshotAndReplace ist und die BeginTime der Animation nullist, werden alle aktuellen Animationen entfernt, und der aktuelle Wert der Eigenschaft wird gehalten.

Wenn handoffBehaviorSnapshotAndReplace ist und animation ein null Verweis ist, werden alle Animationen aus der Eigenschaft entfernt, und der Eigenschaftswert wird wieder auf den Basiswert zurückgesetzt.

Wenn handoffBehaviorComposeist, hat diese Methode keine Auswirkung, wenn die Animation oder deren BeginTimenullist.

handoffBehavior
HandoffBehavior

Ein Wert, der angibt, wie die neue Animation mit allen aktuellen Animationen interagieren soll, die sich bereits auf den Eigenschaftswert auswirken.

Implementiert

Beispiele

Das folgende Beispiel zeigt, wie Animationen mit unterschiedlichen HandoffBehavior Einstellungen angewendet werden.

C#
/*

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

Hinweise

Wenn die Animation eine BeginTime hat, die größer als 0 ist, beginnt die Animation nach ablaufen dieser Zeitspanne ab dem Zeitpunkt, zu dem der nächste Frame gerendert wird.

Verwenden des VerfassenhandoffBehavior

Wenn Sie eine Storyboard, AnimationTimelineoder AnimationClock auf eine Eigenschaft mit dem ComposeHandoffBehavioranwenden, verbrauchen alle zuvor dieser Eigenschaft zugeordneten Clock Objekte weiterhin Systemressourcen; Das Timing-System entfernt diese Uhren nicht automatisch.

Um Leistungsprobleme zu vermeiden, wenn Sie eine große Anzahl von Uhren mit Composeanwenden, sollten Sie das Verfassen von Uhren nach Abschluss der animierten Eigenschaft entfernen. Es gibt mehrere Möglichkeiten, eine Uhr zu entfernen.

Dies ist in erster Linie ein Problem bei Animationen für Objekte, die eine lange Lebensdauer aufweisen. Wenn ein Objekt garbage collection wird, werden die Uhren ebenfalls getrennt und garbage collection.

Weitere Informationen zu Uhrenobjekten finden Sie unter Animation and Timing System Overview.

Gilt für:

.NET Framework 4.8.1 und andere Versionen
Produkt Versionen
.NET Framework 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
Windows Desktop 3.0, 3.1, 5, 6, 7, 8, 9