Gewusst wie: Steuern eines Storyboards nach dem Start
In diesem Beispiel wird gezeigt, wie Sie mithilfe von Code ein Storyboard steuern, nachdem es gestartet wurde. Verwenden Sie zum Steuern eines Storyboards in XAML die Objekte Trigger und TriggerAction. Ein Beispiel finden Sie unter Gewusst wie: Verwenden von Ereignistriggern zum Steuern eines Storyboards nach dessen Start.
Zum Starten eines Storyboards verwenden Sie die Begin-Methode, durch die die Animationen des Storyboards an die zu animierenden Eigenschaften verteilt werden und das Storyboard gestartet wird.
Um ein Storyboard steuerbar zu machen, verwenden Sie die Begin-Methode und geben als zweiten Parameter true an. Anschließend können Sie das Storyboard mit den interaktiven Methoden anhalten, fortsetzen, suchen, beschleunigen und verlangsamen oder es an das Ende des Füllzeitraums setzen. Die folgende Liste gibt einen Überblick über die interaktiven Methoden des Storyboards:
Pause: Hält das Storyboard an.
Resume: Setzt ein angehaltenes Storyboard fort.
SetSpeedRatio: Legt die interaktive Geschwindigkeit des Storyboards fest.
Seek: Sucht die angegebene Position des Storyboards.
SeekAlignedToLastTick: Sucht die angegebene Position des Storyboards. Im Gegensatz zur Seek-Methode wird dieser Vorgang vor dem nächsten Teilstrich verarbeitet.
SkipToFill: Setzt das Storyboard auf den Füllzeitraum, falls vorhanden.
Stop: Beendet das Storyboard.
Im folgenden Beispiel werden verschiedene Storyboard-Methoden zur interaktiven Steuerung eines Storyboards verwendet.
Hinweis: Ein Beispiel zum Steuern eines Storyboards mithilfe von Triggern in XAML finden Sie unter Gewusst wie: Verwenden von Ereignistriggern zum Steuern eines Storyboards nach dessen Start.
Beispiel
'
' This example shows how to control
' a storyboard after it has started.
'
'
Imports System
Imports System.Windows
Imports System.Windows.Controls
Imports System.Windows.Media
Imports System.Windows.Shapes
Imports System.Windows.Media.Animation
Namespace Microsoft.Samples.Animation.TimingBehaviors
Partial Public Class ControlStoryboardExample
Inherits Page
Private myStoryboard As Storyboard
Public Sub New()
' Create a name scope for the page.
NameScope.SetNameScope(Me, New NameScope())
Me.WindowTitle = "Controlling a Storyboard"
Me.Background = Brushes.White
Dim myStackPanel As New StackPanel()
myStackPanel.Margin = New Thickness(20)
' Create a rectangle.
Dim myRectangle As New Rectangle()
myRectangle.Width = 100
myRectangle.Height = 20
myRectangle.Margin = New Thickness(12,0,0,5)
myRectangle.Fill = New SolidColorBrush(Color.FromArgb(170, 51, 51, 255))
myRectangle.HorizontalAlignment = HorizontalAlignment.Left
myStackPanel.Children.Add(myRectangle)
' Assign the rectangle a name by
' registering it with the page, so that
' it can be targeted by storyboard
' animations.
Me.RegisterName("myRectangle", myRectangle)
'
' Create an animation and a storyboard to animate the
' rectangle.
'
Dim myDoubleAnimation As New DoubleAnimation(100, 500, New Duration(TimeSpan.FromSeconds(5)))
Storyboard.SetTargetName(myDoubleAnimation, "myRectangle")
Storyboard.SetTargetProperty(myDoubleAnimation, New PropertyPath(Rectangle.WidthProperty))
myStoryboard = New Storyboard()
myStoryboard.Children.Add(myDoubleAnimation)
'
' Create some buttons to control the storyboard
' and a panel to contain them.
'
Dim buttonPanel As New StackPanel()
buttonPanel.Orientation = Orientation.Horizontal
Dim beginButton As New Button()
beginButton.Content = "Begin"
AddHandler beginButton.Click, AddressOf beginButton_Clicked
buttonPanel.Children.Add(beginButton)
Dim pauseButton As New Button()
pauseButton.Content = "Pause"
AddHandler pauseButton.Click, AddressOf pauseButton_Clicked
buttonPanel.Children.Add(pauseButton)
Dim resumeButton As New Button()
resumeButton.Content = "Resume"
AddHandler resumeButton.Click, AddressOf resumeButton_Clicked
buttonPanel.Children.Add(resumeButton)
Dim skipToFillButton As New Button()
skipToFillButton.Content = "Skip to Fill"
AddHandler skipToFillButton.Click, AddressOf skipToFillButton_Clicked
buttonPanel.Children.Add(skipToFillButton)
Dim setSpeedRatioButton As New Button()
setSpeedRatioButton.Content = "Triple Speed"
AddHandler setSpeedRatioButton.Click, AddressOf setSpeedRatioButton_Clicked
buttonPanel.Children.Add(setSpeedRatioButton)
Dim stopButton As New Button()
stopButton.Content = "Stop"
AddHandler stopButton.Click, AddressOf stopButton_Clicked
buttonPanel.Children.Add(stopButton)
myStackPanel.Children.Add(buttonPanel)
Me.Content = myStackPanel
End Sub
' Begins the storyboard.
Private Sub beginButton_Clicked(ByVal sender As Object, ByVal args As RoutedEventArgs)
' Specifying "true" as the second Begin parameter
' makes this storyboard controllable.
myStoryboard.Begin(Me, True)
End Sub
' Pauses the storyboard.
Private Sub pauseButton_Clicked(ByVal sender As Object, ByVal args As RoutedEventArgs)
myStoryboard.Pause(Me)
End Sub
' Resumes the storyboard.
Private Sub resumeButton_Clicked(ByVal sender As Object, ByVal args As RoutedEventArgs)
myStoryboard.Resume(Me)
End Sub
' Advances the storyboard to its fill period.
Private Sub skipToFillButton_Clicked(ByVal sender As Object, ByVal args As RoutedEventArgs)
myStoryboard.SkipToFill(Me)
End Sub
' Updates the storyboard's speed.
Private Sub setSpeedRatioButton_Clicked(ByVal sender As Object, ByVal args As RoutedEventArgs)
' Makes the storyboard progress three times as fast as normal.
myStoryboard.SetSpeedRatio(Me, 3)
End Sub
' Stops the storyboard.
Private Sub stopButton_Clicked(ByVal sender As Object, ByVal args As RoutedEventArgs)
myStoryboard.Stop(Me)
End Sub
End Class
End Namespace
/*
This example shows how to control
a storyboard after it has started.
*/
using System;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Media;
using System.Windows.Shapes;
using System.Windows.Media.Animation;
namespace Microsoft.Samples.Animation.TimingBehaviors
{
public partial class ControlStoryboardExample : Page
{
private Storyboard myStoryboard;
public ControlStoryboardExample()
{
// Create a name scope for the page.
NameScope.SetNameScope(this, new NameScope());
this.WindowTitle = "Controlling a Storyboard";
this.Background = Brushes.White;
StackPanel myStackPanel = new StackPanel();
myStackPanel.Margin = new Thickness(20);
// Create a rectangle.
Rectangle myRectangle = new Rectangle();
myRectangle.Width = 100;
myRectangle.Height = 20;
myRectangle.Margin = new Thickness(12,0,0,5);
myRectangle.Fill = new SolidColorBrush(Color.FromArgb(170, 51, 51, 255));
myRectangle.HorizontalAlignment = HorizontalAlignment.Left;
myStackPanel.Children.Add(myRectangle);
// Assign the rectangle a name by
// registering it with the page, so that
// it can be targeted by storyboard
// animations.
this.RegisterName("myRectangle", myRectangle);
//
// Create an animation and a storyboard to animate the
// rectangle.
//
DoubleAnimation myDoubleAnimation =
new DoubleAnimation(100, 500, new Duration(TimeSpan.FromSeconds(5)));
Storyboard.SetTargetName(myDoubleAnimation, "myRectangle");
Storyboard.SetTargetProperty(myDoubleAnimation, new PropertyPath(Rectangle.WidthProperty));
myStoryboard = new Storyboard();
myStoryboard.Children.Add(myDoubleAnimation);
//
// Create some buttons to control the storyboard
// and a panel to contain them.
//
StackPanel buttonPanel = new StackPanel();
buttonPanel.Orientation = Orientation.Horizontal;
Button beginButton = new Button();
beginButton.Content = "Begin";
beginButton.Click += new RoutedEventHandler(beginButton_Clicked);
buttonPanel.Children.Add(beginButton);
Button pauseButton = new Button();
pauseButton.Content = "Pause";
pauseButton.Click +=new RoutedEventHandler(pauseButton_Clicked);
buttonPanel.Children.Add(pauseButton);
Button resumeButton = new Button();
resumeButton.Content = "Resume";
resumeButton.Click +=new RoutedEventHandler(resumeButton_Clicked);
buttonPanel.Children.Add(resumeButton);
Button skipToFillButton = new Button();
skipToFillButton.Content = "Skip to Fill";
skipToFillButton.Click +=new RoutedEventHandler(skipToFillButton_Clicked);
buttonPanel.Children.Add(skipToFillButton);
Button setSpeedRatioButton = new Button();
setSpeedRatioButton.Content = "Triple Speed";
setSpeedRatioButton.Click +=new RoutedEventHandler(setSpeedRatioButton_Clicked);
buttonPanel.Children.Add(setSpeedRatioButton);
Button stopButton = new Button();
stopButton.Content = "Stop";
stopButton.Click +=new RoutedEventHandler(stopButton_Clicked);
buttonPanel.Children.Add(stopButton);
myStackPanel.Children.Add(buttonPanel);
this.Content = myStackPanel;
}
// Begins the storyboard.
private void beginButton_Clicked(object sender, RoutedEventArgs args)
{
// Specifying "true" as the second Begin parameter
// makes this storyboard controllable.
myStoryboard.Begin(this, true);
}
// Pauses the storyboard.
private void pauseButton_Clicked(object sender, RoutedEventArgs args)
{
myStoryboard.Pause(this);
}
// Resumes the storyboard.
private void resumeButton_Clicked(object sender, RoutedEventArgs args)
{
myStoryboard.Resume(this);
}
// Advances the storyboard to its fill period.
private void skipToFillButton_Clicked(object sender, RoutedEventArgs args)
{
myStoryboard.SkipToFill(this);
}
// Updates the storyboard's speed.
private void setSpeedRatioButton_Clicked(object sender, RoutedEventArgs args)
{
// Makes the storyboard progress three times as fast as normal.
myStoryboard.SetSpeedRatio(this, 3);
}
// Stops the storyboard.
private void stopButton_Clicked(object sender, RoutedEventArgs args)
{
myStoryboard.Stop(this);
}
}
}
Siehe auch
Aufgaben
Gewusst wie: Verwenden von Ereignistriggern zum Steuern eines Storyboards nach dessen Start