アニメーション再生中にコントロールしたい
アニメーション再生中に再生しているアニメーションのコントロールをしたいと思って色々見てたら見つけましたこんなもの。
ClockController クラス (System.Windows.Media.Animation)
コードがぐっちゃぐちゃなのでシンプルにしてみるよ。
まずxamlから
<StackPanel> <Button Content="Begin" Margin="10" Click="Begin"/> <Button Content="Pause" Margin="10" Click="Pause"/> <Button Content="Resume" Margin="10" Click="Resume"/> <Button Content="SkipToFill" Margin="10" Click="Skip2Fill"/> <Button Content="Stop" Margin="10" Click="Stop"/> <Button Content="Seek" Margin="10" Click="Button_Click" x:Name="myButton"/> </StackPanel>
myButtonと名づけられたボタンにアニメーションを適用してみようと思います。えへんなのです。あ、ちなみにSeekボタンを一番最初に押さないと例外が発生しますよ!!
つづいてコードビハインド。
public partial class uc1 : UserControl { ScaleTransform myScaleTransForm; AnimationClock myClock; public uc1() { InitializeComponent(); myScaleTransForm = new ScaleTransform(1, 1); myButton.RenderTransform = myScaleTransForm; } private void Button_Click(object sender, RoutedEventArgs e) { DoubleAnimation myAnimation = new DoubleAnimation(1, 5, new Duration(TimeSpan.FromSeconds(50))); myAnimation.AutoReverse = false; myClock = myAnimation.CreateClock(); myScaleTransForm.ApplyAnimationClock(ScaleTransform.ScaleXProperty, myClock); myScaleTransForm.ApplyAnimationClock(ScaleTransform.ScaleYProperty, myClock); } private void Begin(object sender, RoutedEventArgs e) { myClock.Controller.Begin(); } private void Pause(object sender, RoutedEventArgs e) { myClock.Controller.Pause(); } private void Resume(object sender, RoutedEventArgs e) { myClock.Controller.Resume(); } private void Skip2Fill(object sender, RoutedEventArgs e) { myClock.Controller.SkipToFill(); } private void Stop(object sender, RoutedEventArgs e) { myClock.Controller.Stop(); } }
特にこれといって解説が必要なさそうなシンプルなコードになりましたね。
わざとわかりやすいように50秒かけてアニメーション再生するようにしてます。
結果は、実行してみてください。
そんなこんなでした。