Как выяснилось, в этом случае вы не можете использовать синтаксис пути свойств, поскольку анимируемые свойства не являются свойствами FrameworkElement
. По крайней мере, именно так я интерпретирую удивительно удивительное исключение, которое я получаю при внесении изменений, предложенных Anvaka:
Cannot automatically create animation clone for frozen property values on
'System.Windows.Media.TranslateTransform' objects. Only FrameworkElement and
FrameworkContentElement (or derived) types are supported.
Кажется, чтобы оживить их, я должен использовать NameScope
и использовать SetTargetName
, чтобы назвать TransformElement
. Затем, пока я передаю FrameworkElement
, для которого я устанавливаю область имен, в метод Begin
, раскадровка может находить объект и свойства и анимировать их, и все это работает. Конечный результат выглядит так:
public void BeginMove(Point translatePosition)
{
NameScope.SetNameScope(this, new NameScope());
RenderTransform = new TranslateTransform();
RegisterName("TranslateTransform", RenderTransform);
Duration d = new Duration(new TimeSpan(0, 0, 0, 0, 400));
DoubleAnimation x = new DoubleAnimation(translatePosition.X, d);
DoubleAnimation y = new DoubleAnimation(translatePosition.Y, d);
Storyboard.SetTargetName(x, "TranslateTransform");
Storyboard.SetTargetProperty(x, new PropertyPath(TranslateTransform.XProperty));
Storyboard.SetTargetName(y, "TranslateTransform");
Storyboard.SetTargetProperty(y, new PropertyPath(TranslateTransform.YProperty));
Storyboard sb = new Storyboard();
sb.Children.Add(x);
sb.Children.Add(y);
sb.Completed += sb_Completed;
// you must pass this to the Begin method, otherwise the timeline won't be
// able to find the named objects it's animating because it doesn't know
// what name scope to look in
sb.Begin(this);
}