我经常需要为一些不属于 wpf 视图的东西设置动画,例如我的计算机的音量或鼠标的位置。我想通过使用 wpf 故事板和内置缓动功能来做到这一点。
例如,假设我想使用以下情节提要在我的计算机上制作动画(减小音量):
<Storyboard x:Key="Storyboard1">
<DoubleAnimationUsingKeyFrames
Storyboard.TargetProperty="someProperty"
Storyboard.TargetName="SomeTarget">
<EasingDoubleKeyFrame KeyTime="0:0:1" Value="0">
<EasingDoubleKeyFrame.EasingFunction>
<CircleEase EasingMode="EaseOut"/>
</EasingDoubleKeyFrame.EasingFunction>
</EasingDoubleKeyFrame>
</DoubleAnimationUsingKeyFrames>
</Storyboard>
在我后面的代码中,我使用以下函数设置音量:
MyVolumeController.SetVolume(0);
因此,我想创建一个看起来像这样的函数:(注意该函数是某种伪代码)
public void AnimateProperty(Storyboard sb, Action<double> onPropertyChange)
{
var property = //sb.targetProperty;
property.OnValueChanged += (a,b)=>{
onPropertyChange(b.newValue);
}
sb.begin();// start animating
}
然后我可以通过调用该方法为音量设置动画:
AnimateProperty(
(Storyboard)this.FindResource("Storyboard1"), // storyboard
(newVal)=>{MyVolumeController.SetVolume(newVal) // action
);