Я должен вручную перевернуть раскадровку:
// does not work.
public static Storyboard Reverse(Storyboard storyboard)
{
Storyboard newStoryboard = new Storyboard();
newStoryboard.SpeedRatio = storyboard.SpeedRatio;
foreach (var unknownChild in storyboard.Children)
{
if (unknownChild is DoubleAnimation)
{
DoubleAnimation child = unknownChild as DoubleAnimation;
DoubleAnimation newChild = new DoubleAnimation()
{
Duration = child.Duration,
// AutoReverse, BeginTime, FillBehaviour, RepeatBehaviour, SpeedRatio?
From = child.To,
To = child.From,
EasingFunction = child.EasingFunction
};
Storyboard.SetTargetProperty(newChild, Storyboard.GetTargetProperty(child));
Storyboard.SetTargetName(newChild, Storyboard.GetTargetName(child));
newStoryboard.Children.Add(newChild);
}
else if (unknownChild is ObjectAnimationUsingKeyFrames)
{
ObjectAnimationUsingKeyFrames child = unknownChild as ObjectAnimationUsingKeyFrames;
var newChild = new ObjectAnimationUsingKeyFrames()
{
Duration = (child as Timeline).Duration,
};
foreach (ObjectKeyFrame keyFrame in child.KeyFrames)
{
var newKeyFrame = new DiscreteObjectKeyFrame() {
KeyTime = KeyTime.FromTimeSpan(child.Duration.TimeSpan - keyFrame.KeyTime.TimeSpan),
Value = keyFrame.Value
};
newChild.KeyFrames.Add(newKeyFrame);
}
Storyboard.SetTargetName(newChild, Storyboard.GetTargetName(child));
Storyboard.SetTargetProperty(newChild, Storyboard.GetTargetProperty(child));
newStoryboard.Children.Add(newChild);
}
else
{
throw new Exception("type " + unknownChild + " not supported");
}
}
return newStoryboard;
}
Однако основная проблема, как мне кажется, заключается в том, что даже при передаче значений TargetName и TargetProperty новая раскадровка не может найти правильные элементы.1004 *
К сожалению, я не знаю, как класс Storyboard определяет его местоположение в дереве Xaml / его родительском ресурсе: /