Procedura: controllare uno storyboard in seguito al relativo avvio
Aggiornamento: novembre 2007
In questo esempio viene illustrato come utilizzare codice per controllare Storyboard dopo l'avvio. Per controllare uno storyboard in XAML, utilizzare gli oggetti Trigger e TriggerAction. Per un esempio, vedere Procedura: utilizzare i trigger di evento per controllare uno storyboard dopo il relativo avvio.
Per avviare uno storyboard, viene utilizzato il relativo metodo Begin, che distribuisce le animazioni dello storyboard alle proprietà animate e avvia lo storyboard.
Per rendere controllabile uno storyboard, viene utilizzato il metodo Begin e viene specificato true come secondo parametro. È quindi possibile utilizzare i metodi interattivi dello storyboard per sospendere, riprendere, cercare, interrompere, accelerare o rallentare lo storyboard oppure andare avanti fino alla fine del segmento di tempo. Di seguito viene fornito un elenco dei metodi interattivi dello storyboard:
Pause: sospende lo storyboard.
Resume: riprende uno storyboard sospeso.
SetSpeedRatio: imposta la velocità interattiva dello storyboard.
Seek: cerca la posizione specificata nello storyboard.
SeekAlignedToLastTick: cerca la posizione specificata nello storyboard. A differenza del metodo Seek, questa operazione viene elaborata prima del tick successivo.
SkipToFill: fa avanzare lo storyboard fino alla fine del segmento di tempo, se presente.
Stop: interrompe lo storyboard.
Nell'esempio riportato di seguito vengono utilizzati vari metodi di storyboard per controllare in modo interattivo uno storyboard.
Nota: per un esempio di controllo di uno storyboard tramite trigger con XAML, vedere Procedura: utilizzare i trigger di evento per controllare uno storyboard dopo il relativo avvio.
/* 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); } } }