У меня есть очень простой проект, в котором мне нужно анимировать RenderTransform элемента, а затем дополнительно управлять таким преобразованием.
Пожалуйста, найдите в качестве ссылки MVCE здесь: https://github.com/cghersi/UWPExamples/tree/master/RenderTransformAnimation.
Сценарий следующий: существует ScrollViewer m_scrollView
с содержанием Canvas
m_zoomView
.Для примера у нас также есть CompositeTransform m_zoomViewTransform = m_zoomView.RenderTransform
.
. Я использую следующий метод для манипуляции с RenderTransform, с анимацией или без нее:
private void SetEffectiveOffsetOfScrollView(Point newOffset, bool isAnimated)
{
if (isAnimated)
{
TimeSpan dur = TimeSpan.FromSeconds(0.2);
Storyboard sb = new Storyboard { Duration = dur };
DoubleAnimation animationX = new DoubleAnimation
{
To = newOffset.X,
Duration = dur,
AutoReverse = false
};
DoubleAnimation animationY = new DoubleAnimation
{
To = newOffset.Y,
Duration = dur,
AutoReverse = false
};
sb.Children.Add(animationX);
sb.Children.Add(animationY);
Storyboard.SetTarget(animationX, m_zoomViewTransform);
Storyboard.SetTarget(animationY, m_zoomViewTransform);
Storyboard.SetTargetProperty(animationX, "CompositeTransform.TranslateX");
Storyboard.SetTargetProperty(animationY, "CompositeTransform.TranslateY");
sb.Begin();
sb.Completed += (sender, o) =>
{
m_zoomViewTransform.TranslateX = newOffset.X;
m_zoomViewTransform.TranslateY = newOffset.Y;
};
}
else
{
m_zoomViewTransform.TranslateX = newOffset.X;
m_zoomViewTransform.TranslateY = newOffset.Y;
}
}
Теперь, если яиспользуйте SetEffectiveOffsetOfScrollView()
с isAnimated = true
, я больше не могу изменить RenderTransform
или, по крайней мере, я больше не вижу никаких обновлений пользовательского интерфейса.
В MVCE я добавил кнопку, котораявызывает метод SetEffectiveOffsetOfScrollView()
с isAnimated = true
, и я добавил событие Manipulation для панорамирования m_zoomView Canvas
: как только я нажимаю на кнопку, я больше не могу панорамировать Canvas
.
Как я могу анимировать преобразование, все еще имея возможность видеть обновления пользовательского интерфейса после этого действия, используя SetEffectiveOffsetOfScrollView()
с animate=false
?