Animatable.BeginAnimation Metodo
Definizione
Importante
Alcune informazioni sono relative alla release non definitiva del prodotto, che potrebbe subire modifiche significative prima della release definitiva. Microsoft non riconosce alcuna garanzia, espressa o implicita, in merito alle informazioni qui fornite.
Applica un'animazione al DependencyPropertyspecificato.
Overload
BeginAnimation(DependencyProperty, AnimationTimeline) |
Applica un'animazione al DependencyPropertyspecificato. L'animazione viene avviata quando viene eseguito il rendering del fotogramma successivo. Se la proprietà specificata è già animata, viene utilizzato il comportamento di handoff SnapshotAndReplace. |
BeginAnimation(DependencyProperty, AnimationTimeline, HandoffBehavior) |
Applica un'animazione al DependencyPropertyspecificato. L'animazione viene avviata quando viene eseguito il rendering del fotogramma successivo. Se la proprietà specificata è già animata, viene utilizzata la HandoffBehavior specificata. |
BeginAnimation(DependencyProperty, AnimationTimeline)
Applica un'animazione al DependencyPropertyspecificato. L'animazione viene avviata quando viene eseguito il rendering del fotogramma successivo. Se la proprietà specificata è già animata, viene utilizzato il comportamento di handoff SnapshotAndReplace.
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)
Parametri
Proprietà da animare.
- animation
- AnimationTimeline
Animazione utilizzata per animare la proprietà specificata.
Se il BeginTime dell'animazione è null
, tutte le animazioni correnti verranno rimosse e il valore corrente della proprietà verrà mantenuto.
Se animation
è null
, tutte le animazioni verranno rimosse dalla proprietà e il valore della proprietà verrà ripristinato al relativo valore di base.
Implementazioni
Commenti
Se l'animazione ha un BeginTime maggiore di zero, l'animazione inizia dopo tale intervallo di tempo trascorso dal momento in cui viene eseguito il rendering del fotogramma successivo.
Si applica a
BeginAnimation(DependencyProperty, AnimationTimeline, HandoffBehavior)
Applica un'animazione al DependencyPropertyspecificato. L'animazione viene avviata quando viene eseguito il rendering del fotogramma successivo. Se la proprietà specificata è già animata, viene utilizzata la HandoffBehavior specificata.
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)
Parametri
Proprietà da animare.
- animation
- AnimationTimeline
Animazione utilizzata per animare la proprietà specificata.
Se handoffBehavior
è SnapshotAndReplace e il BeginTime dell'animazione è null
, tutte le animazioni correnti verranno rimosse e il valore corrente della proprietà verrà mantenuto.
Se handoffBehavior
è SnapshotAndReplace e animation
è un riferimento null
, tutte le animazioni verranno rimosse dalla proprietà e il valore della proprietà tornerà al valore di base.
Se handoffBehavior
è Compose, questo metodo non avrà alcun effetto se l'animazione o il relativo BeginTime è null
.
- handoffBehavior
- HandoffBehavior
Valore che specifica il modo in cui la nuova animazione deve interagire con qualsiasi animazione corrente che influisce già sul valore della proprietà.
Implementazioni
Esempio
L'esempio seguente illustra come applicare animazioni usando impostazioni di HandoffBehavior diverse.
/*
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
Commenti
Se l'animazione ha un BeginTime maggiore di zero, l'animazione inizia dopo tale intervallo di tempo trascorso dal momento in cui viene eseguito il rendering del fotogramma successivo.
Uso di Compose HandoffBehavior
Quando si applica un Storyboard, AnimationTimelineo AnimationClock a una proprietà utilizzando l'ComposeHandoffBehavior, tutti gli oggetti Clock precedentemente associati a tale proprietà continuano a utilizzare le risorse di sistema; il sistema di temporizzazione non rimuoverà automaticamente questi orologi.
Per evitare problemi di prestazioni quando si applica un numero elevato di orologi usando Compose, è necessario rimuovere i clock di composizione dalla proprietà animata dopo il completamento. Esistono diversi modi per rimuovere un orologio.
Per rimuovere tutti gli orologi da una proprietà, utilizzare il metodo ApplyAnimationClock(DependencyProperty, AnimationClock) o BeginAnimation(DependencyProperty, AnimationTimeline) dell'oggetto animato. Specificare la proprietà animata come primo parametro e
null
come seconda. In questo modo tutti gli orologi di animazione verranno rimossi dalla proprietà .Per rimuovere un AnimationClock specifico da un elenco di orologi, utilizzare la proprietà Controller del AnimationClock per recuperare un ClockController, quindi chiamare il metodo Remove del ClockController. Questa operazione viene in genere eseguita nel gestore eventi Completed per un orologio. Si noti che solo gli orologi radice possono essere controllati da un ClockController; la proprietà Controller di un orologio figlio restituirà
null
. Si noti anche che l'evento Completed non verrà chiamato se la durata effettiva dell'orologio è per sempre. In tal caso, l'utente dovrà determinare quando chiamare Remove.
Si tratta principalmente di un problema per le animazioni sugli oggetti che hanno una durata prolungata. Quando un oggetto viene sottoposto a Garbage Collection, anche i relativi orologi verranno disconnessi e il Garbage Collection.
Per altre informazioni sugli oggetti clock, vedere cenni preliminari sull'animazione e sul sistema di temporizzazione.