Все,Свойство KeyTime на объекте KeyFrame должно быть установлено на неотрицательное значение TimeSpan?
Может кто-нибудь сказать мне, почему этот KeyTime говорит мне, что это отрицательное значение во время выполнения? Я удалил некоторую логику, которая создает путь к изображению.
public Storyboard CreateAnimationStoryBoard(DependencyObject dependencyObjectTarget,Image targetImage)
{
try
{
Storyboard sb = new Storyboard();
Storyboard.SetTarget(sb, dependencyObjectTarget);
Storyboard.SetTargetName(sb, targetImage.Name);
Storyboard.SetTargetProperty(sb, new PropertyPath(Image.SourceProperty));
ObjectAnimationUsingKeyFrames oaukf = new ObjectAnimationUsingKeyFrames();
oaukf.Duration = TimeSpan.FromSeconds(animationLength);
oaukf.BeginTime = new TimeSpan(0, 0, 0);
for (int i = startFrame; i <= endFrame; i++)
{
*build an animation string path here (hidden)*
Uri u;
Uri.TryCreate(animationString.ToString(), UriKind.RelativeOrAbsolute, out u);
BitmapImage bi = new BitmapImage(u);
DiscreteObjectKeyFrame dokf = new DiscreteObjectKeyFrame();
dokf.KeyTime = KeyTime.Uniform;
dokf.Value = bi;
oaukf.KeyFrames.Add(dokf);
}
sb.Children.Add(oaukf);
return sb;
}
Теперь, в частности, во время выполнения, он говорит мне, что «KeyTime собственность на объект KeyFrame должен быть установлен на неотрицательное значение TimeSpan». Если я немного погружусь в переменную, я больше не буду получать отладочную информацию. Я проверил, являются ли растровые изображения нулевыми, а какие нет. Я попытался настроить свой собственный промежуток времени (до 1 секунды), например, и получил ту же ошибку, что и выше.
Все это связано с аналогичной функцией, которая есть в WPF, которая строит раскадровку именно таким образом. Единственное отличие в том, что Keytime имеет значение KeyTime.PACED в wpf. Поскольку Silverlight, по-видимому, не имеет этой опции, я использовал Uniform и столкнулся с этой ошибкой. Может кто-то пролить свет на то, почему это происходит в Silverlight, но отлично работает в WPF?