Прочитать на английском

Поделиться через


Storyboard.Seek Метод

Определение

Установка объекта Storyboard в новую позицию в следующем тике часов.

Перегрузки

Seek(TimeSpan)

Выполняет поиск этого Storyboard в указанной позиции. Объект Storyboard выполняет запрошенный поиск, когда происходит следующий такт таймера.

Seek(TimeSpan, TimeSeekOrigin)

Выполняет поиск этого Storyboard в указанной позиции. Объект Storyboard выполняет запрошенный поиск, когда происходит следующий такт таймера.

Seek(FrameworkContentElement, TimeSpan, TimeSeekOrigin)

Выполняет поиск этого Storyboard в указанной позиции. Объект Storyboard выполняет запрошенный поиск, когда происходит следующий такт таймера.

Seek(FrameworkElement, TimeSpan, TimeSeekOrigin)

Выполняет поиск этого Storyboard в указанной позиции. Объект Storyboard выполняет запрошенный поиск, когда происходит следующий такт таймера.

Seek(TimeSpan)

Выполняет поиск этого Storyboard в указанной позиции. Объект Storyboard выполняет запрошенный поиск, когда происходит следующий такт таймера.

C#
public void Seek(TimeSpan offset);

Параметры

offset
TimeSpan

Положительное или отрицательное значение, определяющее величину, на которую должна продвигаться вперед или назад шкала времени.

Комментарии

Обратите внимание, что операции поиска не учитывают параметры раскадровки SpeedRatio или SlipBehavior . Раскадровка обрабатывается так, как если бы она имеет SpeedRatio значение 1 и нет SlipBehavior.

Для интерактивного управления этой раскадровки необходимо использовать тот же containingObject параметр при вызове интерактивных методов, которые использовались для запуска раскадровки. Управляемая раскадровка может приостанавливать, возобновлять, искать, останавливать и удаляться. Чтобы сделать раскадровку управляемой в коде, необходимо использовать соответствующую перегрузку метода раскадровки Begin и указать true , чтобы сделать ее управляемой. Пример см. в разделе Практическое руководство. Управление раскадровки после ее запуска.

Применяется к

.NET Framework 4.8.1 и другие версии
Продукт Версии
.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, 10

Seek(TimeSpan, TimeSeekOrigin)

Выполняет поиск этого Storyboard в указанной позиции. Объект Storyboard выполняет запрошенный поиск, когда происходит следующий такт таймера.

C#
public void Seek(TimeSpan offset, System.Windows.Media.Animation.TimeSeekOrigin origin);

Параметры

offset
TimeSpan

Положительное или отрицательное значение, определяющее величину, на которую временная шкала должна переместиться вперед или назад от заданного типа origin.

origin
TimeSeekOrigin

Положение, с которого применяется offset.

Комментарии

Обратите внимание, что операции поиска не учитывают параметры раскадровки SpeedRatio или SlipBehavior . Раскадровка обрабатывается так, как если бы она имеет SpeedRatio значение 1 и нет SlipBehavior.

Для интерактивного управления этой раскадровки необходимо использовать тот же containingObject параметр при вызове интерактивных методов, которые использовались для запуска раскадровки. Управляемая раскадровка может приостанавливать, возобновлять, искать, останавливать и удаляться. Чтобы сделать раскадровку управляемой в коде, необходимо использовать соответствующую перегрузку метода раскадровки Begin и указать true , чтобы сделать ее управляемой. Пример см. в разделе Практическое руководство. Управление раскадровки после ее запуска.

Применяется к

.NET Framework 4.8.1 и другие версии
Продукт Версии
.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, 10

Seek(FrameworkContentElement, TimeSpan, TimeSeekOrigin)

Выполняет поиск этого Storyboard в указанной позиции. Объект Storyboard выполняет запрошенный поиск, когда происходит следующий такт таймера.

C#
public void Seek(System.Windows.FrameworkContentElement containingObject, TimeSpan offset, System.Windows.Media.Animation.TimeSeekOrigin origin);

Параметры

containingObject
FrameworkContentElement

Объект указан при вызове метода Begin(FrameworkContentElement, Boolean). Этот объект содержит объекты Clock, которые были созданы для данной раскадровки и ее дочерних элементов.

offset
TimeSpan

Положительное или отрицательное значение, определяющее величину, на которую временная шкала должна переместиться вперед или назад от заданного типа origin.

origin
TimeSeekOrigin

Положение, с которого применяется offset.

Примеры

В следующем примере показаны методы Seek и SeekAlignedToLastTick .

C#
/*
    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;
using System.Windows.Documents;

namespace Microsoft.Samples.Animation.AnimatingWithStoryboards
{
    public partial class FrameworkContentElementSeekExample : FlowDocument
    {
    
        private Storyboard myStoryboard;
        private TextBlock currentTimeIndicator;
        private TextBox seekDestination;
        private TextBlock rectangleWidthIndicator;
        private Rectangle myRectangle;
        
        public FrameworkContentElementSeekExample()
        {
        
            // Create a name scope for the page.
            NameScope.SetNameScope(this, new NameScope());        
        
            this.Background = Brushes.White;

            BlockUIContainer controlsContainer = new BlockUIContainer();  

            StackPanel myStackPanel = new StackPanel();
            myStackPanel.Margin = new Thickness(20);
            
            // Create a 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(60)));            
            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();
            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);
            Button removeButton = new Button();
            removeButton.Content = "Remove";
            removeButton.Click +=new RoutedEventHandler(removeButton_Clicked);
            buttonPanel.Children.Add(removeButton);            
            
            myStackPanel.Children.Add(buttonPanel);    
            
            // Create some controls to display the
            // storyboard's current time and the
            // current width of the rectangle.
            StackPanel seekPanel = new StackPanel();
            seekPanel.Margin = new Thickness(10);
            StackPanel aPanel = new StackPanel();
            Label aLabel = new Label();
            aPanel.Orientation = Orientation.Horizontal;
            aLabel.Content = "Current Time: ";
            aPanel.Children.Add(aLabel);
            currentTimeIndicator = new TextBlock();
            aPanel.Children.Add(currentTimeIndicator);
            seekPanel.Children.Add(aPanel);
            
            aPanel = new StackPanel();
            aPanel.Orientation = Orientation.Horizontal;
            aLabel = new Label();
            aLabel.Content = "Rectangle Width: ";
            aPanel.Children.Add(aLabel);
            rectangleWidthIndicator = new TextBlock();
            rectangleWidthIndicator.Text = myRectangle.Width.ToString(); 
            aPanel.Children.Add(rectangleWidthIndicator);
            seekPanel.Children.Add(aPanel);

            // Create some controls to enable the
            // user to specify a seek position.
            
            aPanel = new StackPanel();
            aPanel.Orientation = Orientation.Horizontal;
            aLabel = new Label();
            aLabel.Content = "Seek Offset: " ;
            aPanel.Children.Add(aLabel);
            seekDestination = new TextBox();
            seekDestination.Text = "0";
            aPanel.Children.Add(seekDestination);       
            seekPanel.Children.Add(aPanel);

            Button seekButton = new Button();
            seekButton.Content = "Seek";
            seekButton.Click += new RoutedEventHandler(seekButton_Clicked);
            seekPanel.Children.Add(seekButton);
            Button seekAlignedToLastTickButton = new Button();
            seekAlignedToLastTickButton.Content = "Seek Aligned to Last Tick";
            seekAlignedToLastTickButton.Click += new RoutedEventHandler(seekAlignedToLastTickButton_Clicked);
            seekPanel.Children.Add(seekAlignedToLastTickButton);           
            
            myStackPanel.Children.Add(seekPanel);
            
            controlsContainer.Child = myStackPanel;
            this.Blocks.Add(controlsContainer);
            
            myStoryboard.CurrentTimeInvalidated += new EventHandler(myStoryboard_CurrentTimeInvalidated);
        }
        
        // 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);          
        }         
        
        // Removes the storyboard.
        private void removeButton_Clicked(object sender, RoutedEventArgs args)
        {
             myStoryboard.Remove(this);          
        }        
        
        private void seekButton_Clicked(object sender, RoutedEventArgs args)
        {
            try {

                TimeSpan seekTime = TimeSpan.Parse(seekDestination.Text);
                myStoryboard.Seek(this, seekTime, TimeSeekOrigin.BeginTime);
                
                // The rectangle width will probably not be at its new
                // value when this call is made, because the storyboard's
                // clock probably hasn't ticked yet.
                rectangleWidthIndicator.Text = myRectangle.Width.ToString();
            }catch(FormatException ex)
            {
                MessageBox.Show("Invalid TimeSpan value.");
                seekDestination.Focus();
            }
        }
        
        private void seekAlignedToLastTickButton_Clicked(object sender, RoutedEventArgs args)
        {

            try {

                TimeSpan seekTime = TimeSpan.Parse(seekDestination.Text);
                myStoryboard.SeekAlignedToLastTick(this, seekTime, TimeSeekOrigin.BeginTime);
                
                // The rectangle width will be at its new
                // value when this call is made, because SeekAlignedToLastTick 
                // operation immediately updates timeline and animation
                // values.          
                rectangleWidthIndicator.Text = myRectangle.Width.ToString();
            }catch(FormatException ex)
            {
                MessageBox.Show("Invalid TimeSpan value.");
                seekDestination.Focus();
            }    
        }
        
        private void myStoryboard_CurrentTimeInvalidated(object sender, EventArgs e)
        {
        
            currentTimeIndicator.Text = myStoryboard.GetCurrentTime(this).ToString();
        }
    }
}

Комментарии

Обратите внимание, что операции поиска не учитывают параметры раскадровки SpeedRatio или SlipBehavior . Раскадровка обрабатывается так, как если бы она имеет SpeedRatio значение 1 и нет SlipBehavior.

Этот метод изменяет часы CurrentState раскадровки на Active. Этот метод не оказывает влияния на дерево времени до следующей обработки деления. В качестве побочных эффектов соответствующие события также не вызываются до тех пор.

Для интерактивного управления этой раскадровки необходимо использовать тот же containingObject параметр при вызове интерактивных методов, которые использовались для запуска раскадровки. Управляемая раскадровка может приостанавливать, возобновлять, искать, останавливать и удаляться. Чтобы сделать раскадровку управляемой в коде, необходимо использовать соответствующую перегрузку метода раскадровки Begin и указать true , чтобы сделать ее управляемой. Пример см. в разделе Практическое руководство. Управление раскадровки после ее запуска.

Поиск раскадровки активирует CurrentGlobalSpeedInvalidated события и CurrentStateInvalidated .

Применяется к

.NET Framework 4.8.1 и другие версии
Продукт Версии
.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, 10

Seek(FrameworkElement, TimeSpan, TimeSeekOrigin)

Выполняет поиск этого Storyboard в указанной позиции. Объект Storyboard выполняет запрошенный поиск, когда происходит следующий такт таймера.

C#
public void Seek(System.Windows.FrameworkElement containingObject, TimeSpan offset, System.Windows.Media.Animation.TimeSeekOrigin origin);

Параметры

containingObject
FrameworkElement

Объект указан при вызове метода Begin(FrameworkElement, Boolean). Этот объект содержит объекты Clock, которые были созданы для данной раскадровки и ее дочерних элементов.

offset
TimeSpan

Положительное или отрицательное значение, определяющее величину, на которую временная шкала должна переместиться вперед или назад от заданного типа origin.

origin
TimeSeekOrigin

Положение, с которого применяется offset.

Примеры

В следующем примере показано, как выполнить поиск (пропуск) до одной секунды после начала раскадровки.

C#
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 SeekStoryboardExample : Page
    {
    
        private Storyboard myStoryboard;

        public SeekStoryboardExample()
        {
        
            // Create a name scope for the page.
            NameScope.SetNameScope(this, new NameScope());        

            StackPanel myStackPanel = new StackPanel();
            
            // 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 a buton to begin the Storyboard.
            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);

            // Create a button to seek to a specific time in the Storyboard.
            Button seekStoryboardButton = new Button();
            seekStoryboardButton.Content = "Seek to One Second After Begin Time";
            seekStoryboardButton.Click += new RoutedEventHandler(seekStoryboardButton_Clicked);
            buttonPanel.Children.Add(seekStoryboardButton);

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

        // Seek (skip to) one second into the Storboard's active period (Duration). 
        private void seekStoryboardButton_Clicked(object sender, RoutedEventArgs args)
        {
            // Create time interval to seek to. This TimeSpan is set for one second.
            TimeSpan myTimeSpan = new TimeSpan(0, 0, 1);

            // Seek (skip to) to one second from the begin time of the Storyboard.
            myStoryboard.Seek(this, myTimeSpan, TimeSeekOrigin.BeginTime);
        }   
    }
}

В следующем примере показаны методы Seek и SeekAlignedToLastTick .

C#
/*
    This example shows how to seek a storyboard.

*/

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.AnimatingWithStoryboards
{
    public partial class SeekExample : Page
    {
    
        private Storyboard myStoryboard;
        private TextBlock currentTimeIndicator;
        private TextBox seekDestination;
        private TextBlock rectangleWidthIndicator;
        private Rectangle myRectangle;
        
        public SeekExample()
        {
        
            // 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.
            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(60)));            
            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);
            Button removeButton = new Button();
            removeButton.Content = "Remove";
            removeButton.Click +=new RoutedEventHandler(removeButton_Clicked);
            buttonPanel.Children.Add(removeButton);            
            
            myStackPanel.Children.Add(buttonPanel);    
            
            // Create some controls to display the
            // storyboard's current time and the
            // current width of the rectangle.
            StackPanel seekPanel = new StackPanel();
            seekPanel.Margin = new Thickness(10);
            StackPanel aPanel = new StackPanel();
            Label aLabel = new Label();
            aPanel.Orientation = Orientation.Horizontal;
            aLabel.Content = "Current Time: ";
            aPanel.Children.Add(aLabel);
            currentTimeIndicator = new TextBlock();
            aPanel.Children.Add(currentTimeIndicator);
            seekPanel.Children.Add(aPanel);
            
            aPanel = new StackPanel();
            aPanel.Orientation = Orientation.Horizontal;
            aLabel = new Label();
            aLabel.Content = "Rectangle Width: ";
            aPanel.Children.Add(aLabel);
            rectangleWidthIndicator = new TextBlock();
            rectangleWidthIndicator.Text = myRectangle.Width.ToString(); 
            aPanel.Children.Add(rectangleWidthIndicator);
            seekPanel.Children.Add(aPanel);

            // Create some controls to enable the
            // user to specify a seek position.
            
            aPanel = new StackPanel();
            aPanel.Orientation = Orientation.Horizontal;
            aLabel = new Label();
            aLabel.Content = "Seek Offset: " ;
            aPanel.Children.Add(aLabel);
            seekDestination = new TextBox();
            seekDestination.Text = "0";
            aPanel.Children.Add(seekDestination);       
            seekPanel.Children.Add(aPanel);

            Button seekButton = new Button();
            seekButton.Content = "Seek";
            seekButton.Click += new RoutedEventHandler(seekButton_Clicked);
            seekPanel.Children.Add(seekButton);
            Button seekAlignedToLastTickButton = new Button();
            seekAlignedToLastTickButton.Content = "Seek Aligned to Last Tick";
            seekAlignedToLastTickButton.Click += new RoutedEventHandler(seekAlignedToLastTickButton_Clicked);
            seekPanel.Children.Add(seekAlignedToLastTickButton);           
            
            myStackPanel.Children.Add(seekPanel);
            
            this.Content = myStackPanel;   
            
            myStoryboard.CurrentTimeInvalidated += new EventHandler(myStoryboard_CurrentTimeInvalidated);
        }
        
        // 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);          
        }         
        
        // Removes the storyboard.
        private void removeButton_Clicked(object sender, RoutedEventArgs args)
        {
             myStoryboard.Remove(this);          
        }        
        
        private void seekButton_Clicked(object sender, RoutedEventArgs args)
        {
            try {
            
                // The rectangle width will probably not be at its new
                // value when this call is made, because the storyboard's
                // clock probably hasn't ticked yet.
                TimeSpan seekTime = TimeSpan.Parse(seekDestination.Text);
                myStoryboard.Seek(this, seekTime, TimeSeekOrigin.BeginTime);
                rectangleWidthIndicator.Text = myRectangle.Width.ToString();
            }catch(FormatException ex)
            {
                MessageBox.Show("Invalid TimeSpan value.");
                seekDestination.Focus();
            }
        }
        
        private void seekAlignedToLastTickButton_Clicked(object sender, RoutedEventArgs args)
        {

            try {
            
                // The rectangle width will be at its new
                // value when this call is made, because SeekAlignedToLastTick 
                // operation immediately updates timeline and animation
                // values.        
                TimeSpan seekTime = TimeSpan.Parse(seekDestination.Text);
                myStoryboard.SeekAlignedToLastTick(this, seekTime, TimeSeekOrigin.BeginTime);
                rectangleWidthIndicator.Text = myRectangle.Width.ToString();
            }catch(FormatException ex)
            {
                MessageBox.Show("Invalid TimeSpan value.");
                seekDestination.Focus();
            }    
        }
        
        private void myStoryboard_CurrentTimeInvalidated(object sender, EventArgs e)
        {
        
            currentTimeIndicator.Text = myStoryboard.GetCurrentTime(this).ToString();
        }
    }
}

Комментарии

Обратите внимание, что операции поиска не учитывают параметры раскадровки SpeedRatio или SlipBehavior . Раскадровка обрабатывается так, как если бы она имеет SpeedRatio значение 1 и нет SlipBehavior.

Этот метод изменяет часы CurrentState раскадровки на Active. Этот метод не оказывает влияния на дерево времени до следующей обработки деления. В качестве побочных эффектов соответствующие события также не вызываются до тех пор.

Для интерактивного управления этой раскадровки необходимо использовать тот же containingObject параметр при вызове интерактивных методов, которые использовались для запуска раскадровки. Управляемая раскадровка может приостанавливать, возобновлять, искать, останавливать и удаляться, если она становится управляемой. Чтобы сделать раскадровку управляемой в коде, необходимо использовать соответствующую перегрузку метода раскадровки Begin и указать true , чтобы сделать ее управляемой. Пример см. в разделе Практическое руководство. Управление раскадровки после ее запуска.

Поиск раскадровки активирует CurrentGlobalSpeedInvalidated события и CurrentStateInvalidated .

См. также раздел

Применяется к

.NET Framework 4.8.1 и другие версии
Продукт Версии
.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, 10