Я пытаюсь анимировать слайдер, используя DoubleAnimationUsingKeyFrames
и DiscreteDoubleKeyFrame
, чтобы анимировать слайдер для каждого ключевого кадра.Однако при воспроизведении раскадровки кажется, что кадры пропускаются, то есть событие ValueChanged срабатывает не для каждого ключевого кадра.Раскадровка и анимация настраиваются в выделенном коде следующим образом:
DoubleAnimationUsingKeyFrames _timelineAnimation = new DoubleAnimationUsingKeyFrames();
Storyboard _timelineStoryboard = new Storyboard();
void SetupTimeline()
{
// set up timeline storyboard animation
_timelineAnimation.SpeedRatio = 1.0;
Storyboard.SetTarget(_timelineAnimation, timelineSlider);
Storyboard.SetTargetProperty(_timelineAnimation, new PropertyPath(Slider.ValueProperty));
_timelineStoryboard.Children.Add(_timelineAnimation);
timelineSlider.ValueChanged += TimelineSlider_ValueChanged;
}
void StartTimeline(List<double> times)
{
foreach (double time in times)
{
double value = time - timelineSlider.Value;
var keyTime = KeyTime.FromTimeSpan(TimeSpan.FromSeconds(value));
_timelineAnimation.KeyFrames.Add(new DiscreteDoubleKeyFrame(time, keyTime));
}
_timelineStoryboard.Begin(timelineSlider, true);
}
// this does not fire for every key frame
void TimelineSlider_ValueChanged(object sender, RoutedPropertyChangedEventArgs<double> e)
{
Debug.Print($"TimelineSlider_ValueChanged {e.NewValue}");
}
Пример входных данных (в секундах):
136.224
136.238
136.244
136.2441
136.246
136.2461
136.264
136.274
136.294
136.2941
136.296
136.2961
Я полагаю, что проблема может заключаться в том, чтоэлементы данных находятся слишком близко друг к другу.Есть ли способ ускорить разрешение таймера анимации?Или какие-либо другие предложения относительно решения?