【发布时间】:2014-03-10 15:18:23
【问题描述】:
我正在开发 Windows Store 8.1 App 项目,并希望创建一个自定义进度条/仪表控件。该类在内部测量一些值并将它们显示为文本和进度条/仪表。值的变化应该是动画的:
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 的文本动画时,仪表/进度条只是从旧值跳转到新值而没有动画。这是因为 SpeedChanged(...) 只使用新值调用一次,而不是从旧值到新值的动画的每个中间值。
我该如何解决这个问题并使用动画来更改仪表/进度条?
【问题讨论】:
标签: c# animation windows-store-apps dependency-properties