Mar*_*eIV 8 wpf animation timing storyboard
我们有一个从红色到白色混合的彩色动画.目前,这是线性淡化.我们知道我们可以使用Storyboard类的BeginTime等,但这只会延迟整个动画的开始.我们还研究了易用性/易用性方面,但它们似乎也没有用.
具体来说,我们希望保持红色值一秒钟,然后在下一个点亮红色变为白色.可以在纯XAML中完成吗?如果没有,可以在代码隐藏中手动设置故事板吗?...或者我们是否必须使用两个单独的故事板并按顺序播放它们?
LPL*_*LPL 19
几种方法可以做到这一点.
关键帧:
<Storyboard>
<ColorAnimationUsingKeyFrames Storyboard.TargetProperty="Background.Color">
<DiscreteColorKeyFrame Value="Red" KeyTime="0:0:0" />
<DiscreteColorKeyFrame Value="Red" KeyTime="0:0:1" />
<LinearColorKeyFrame Value="White" KeyTime="0:0:2" />
</ColorAnimationUsingKeyFrames>
</Storyboard>
Run Code Online (Sandbox Code Playgroud)
有两个动画的顺序:
<Storyboard>
<ColorAnimation Storyboard.TargetProperty="Background.Color"
From="Red" To="Red" Duration="0:0:1" />
<ColorAnimation Storyboard.TargetProperty="Background.Color"
To="White" BeginTime="0:0:1" Duration="0:0:1" />
</Storyboard>
Run Code Online (Sandbox Code Playgroud)
具有自定义缓动功能:
<Storyboard>
<ColorAnimation Storyboard.TargetProperty="Background.Color"
From="Red" To="White" Duration="0:0:2">
<ColorAnimation.EasingFunction>
<local:CustomEasingFunction />
</ColorAnimation.EasingFunction>
</ColorAnimation>
</Storyboard>
Run Code Online (Sandbox Code Playgroud)
在这种情况下,一个函数显示持续时间的前半部分的转换并保持后半部分的值.因为默认的EasingMode是EaseOut,所以这个函数将向后"播放".
public class CustomEasingFunction : EasingFunctionBase
{
public CustomEasingFunction() : base()
{ }
protected override double EaseInCore(double normalizedTime)
{
return (normalizedTime < 0.5)
? normalizedTime * 2
: 1;
}
protected override Freezable CreateInstanceCore()
{
return new CustomEasingFunction();
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7276 次 |
| 最近记录: |