Я работаю над проектом Windows Store 8.1 App и хотел бы создать пользовательский контроль над уровнем производительности/манометром. Класс внутренне измеряет некоторые значения и отображает их как текст и как progressbar/gauge. Значение изменяется должно быть оживленно:Как получить промежуточные значения/шаги анимации DependencyProperty?
public class CustomGauge : UserControl{
private static readonly DependencyProperty SpeedProperty = DependencyProperty.Register("Speed", typeof(double), typeof(CustomGauge), new PropertyMetadata(null, new PropertyChangedCallback(SpeedChanged)));
private double Speed{
get { return (double)GetValue(SpeedProperty); }
set { SetValue(SpeedProperty , value); }
}
// In CustomGauge.xaml a TextBlock uses a Binding to Speed to display the value
private static void SpeedChanged(DependencyObject d, DependencyPropertyChangedEventArgs e) {
CustomGauge gauge = d as CustomGauge;
if (gauge != null)
gauge.DrawSpeed();
}
private void OnSpeedChanged(double newSpeedValue) {
DoubleAnimation animation = new DoubleAnimation();
animation.EnableDependentAnimation = true;
animation.Duration = new Duration(TimeSpan.FromSeconds(1.5));
animation.To = newSpeedValue;
PowerEase easing = new PowerEase();
easing.Power = 5.0;
easing.EasingMode = EasingMode.EaseOut;
animation.EasingFunction = easing;
Storyboard storyboard = new Storyboard();
storyboard.Children.Add(animation);
Storyboard.SetTarget(animation, this);
Storyboard.SetTargetProperty(animation, "Speed");
storyboard.Begin();
}
private void DrawSpeed() {
...
}
}
Хотя текст XAML TextBlock, который использует привязку к «Speed» анимированный калибровочному/ProgressBar просто переходит от старого значения к новому без анимации. Это связано с тем, что SpeedChanged (...) вызывается только один раз с новым значением, а не для каждого промежуточного значения анимации от старого к новому значению.
Как я могу решить эту проблему и использовать анимацию, чтобы изменить индикатор/прогрессбар?