Почему не сохраняется свойство перевода (композиция)?
У меня есть следующий код, который переводит прямоугольник вниз на 100px, а после завершения переводит прямоугольник прямо на 100px, НО я хотел бы, чтобы перевод вправо поддерживал анимированный Y (100px), однако он этого не делает. Когда я отлаживаю, я замечаю, что значение Translation равно (0,0,0) вместо (0,100,0).
Вот код, который у меня есть в моем приложении (приложение должно иметь цель UWP + минимум SDK 17763):
public MainPage()
{
this.InitializeComponent();
this.Loaded += (sender1, e1) =>
{
var compositor = Window.Current.Compositor;
var batch = compositor.CreateScopedBatch(Windows.UI.Composition.CompositionBatchTypes.Animation);
var vertical = compositor.CreateVector3KeyFrameAnimation();
vertical.InsertKeyFrame(1.0f, new Vector3(0f, 100f, 0f));
vertical.Duration = TimeSpan.FromMilliseconds(2000);
vertical.Target = "Translation";
Rect.StartAnimation(vertical);
batch.End();
batch.Completed += (sender2, e2) =>
{
var horizontal = compositor.CreateVector3KeyFrameAnimation();
// PROBLEM: ... Rect.Translation.Y is not 100, it's 0 ...
horizontal.InsertKeyFrame(1.0f, new Vector3(100f, Rect.Translation.Y, 0f));
horizontal.Duration = TimeSpan.FromMilliseconds(2000);
horizontal.Target = "Translation";
Rect.StartAnimation(horizontal);
};
};
}
Как правильно сохранить позицию Y после завершения начальной анимации?
1 ответ
Я почти уверен, что у Джохни Уэстлейка есть правильный ответ, но я решил свою проблему следующим образом:
this.Loaded += (sender1, e1) =>
{
var compositor = Window.Current.Compositor;
ElementCompositionPreview.SetIsTranslationEnabled(Rect, true);
var visual = ElementCompositionPreview.GetElementVisual(Rect);
var batch = compositor.CreateScopedBatch(Windows.UI.Composition.CompositionBatchTypes.Animation);
var vertical = compositor.CreateScalarKeyFrameAnimation();
vertical.InsertKeyFrame(1.0f, 100f);
vertical.Duration = TimeSpan.FromMilliseconds(2000);
visual.StartAnimation("Translation.Y", vertical);
batch.End();
batch.Completed += (sender2, e2) =>
{
var horizontal = compositor.CreateScalarKeyFrameAnimation();
horizontal.InsertKeyFrame(1.0f, 100f);
horizontal.Duration = TimeSpan.FromMilliseconds(2000);
visual.StartAnimation("Translation.X", horizontal);
};
};