コンピューターのボリュームやマウスの位置など、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
);