共计 1735 个字符,预计需要花费 5 分钟才能阅读完成。
写在后面: 本文代码摘自《Head First C#》
本文应用 ObjectAnimationUsingKeyFrames + Storyboard 构建一个动画。
ObjectAnimationUsingKeyFrames 为关键帧动画,它容许为动画设置几个关键帧,其中每一帧为 ObjectKeyFrame 类型。ObjectKeyFrame 为抽象类,理论应用的是 DiscreteObjectKeyFrame,它是 ObjectKeyFrame 的派生类,示意指标是不间断变动的。ObjectAnimationUsingKeyFrames 的 KeyFrames 属性即为关键帧汇合。DiscreteObjectKeyFrame 的 Value 属性为该帧的值,KeyTime 属性为该帧的工夫点信息。
Storyboard 可执行一组动画,上面的示例代码只蕴含一个动画。其 SetTarget 办法指定执行动画的界面元素,SetTargetProperty 办法指定该动画利用到该界面元素的哪个属性上。定义并设置好动画后,将动画增加到 Storyboard 的 Children 中。
RepeatBehavior 属性示意动画的反复行为。取值为 0 代表不播放,取其它 double 值管制循环次数,取 RepeatBehavior.Forever 示意始终循环。AutoReverse 属性示意是否以相同的动画形式从终止值返回起始值。
// 前台,UserControl 标记的代码
<Grid>
<Image x:Name="iamge" Streach="Fill" />
</Grid>
// 后盾代码
public sealed partial class AnimatedImage:UserControl
{
// 应用 xaml 创立控件,必须有一个无参构造函数
public AnimatedImage()
{this.InitializeComponent();
}
publi AnimatedImage(IEnumerable<string> imageNames, TimeSpan interval)
:this()
{StartAnimation(imageNames, interval);
}
public void StartAnimation(IEnumerable<string> imageNames,
TimeSpan interval)
{Storyboard storyboard = new Storyboard();
ObjectAnimationUsingKeyFrames animation =
new ObjectAnimationUsingKeyFrames();
storyboard.SetTarget(animation, image);
storyboard.SetTargetProperty(animation, "Source");
TimeSpan currentInterval = TimeSpan.FromMilliseconds(0);
foreach(string imageName in imageNames)
{ObjectKeyFrame keyFrame = new DiscreteObjectKeyFrame();
keyFrame.Value = CreateImageFromAssets(imageName);
keyFrame.KeyTime = currentInterval;
animation.KeyFrames.Add(keyFrame);
currentInterval = currentInterval.Add(interval);
}
storyboard.RepeatBehavior = RepeatBehavior.Forever;
storyboard.AutoReverse = true;
storyboard.Children.Add(animation);
storyboard.Begin();}
private static BitmapImage CreateImageFromAssets(string imageFilename)
{return new BitmapImage(new Uri("ms=appx:///Assets/" + imageFilename));
}
}
正文完