Мне нужно масштабировать EllipseGeometry в C# с помощью ScaleTransform, но это не работает. Вот код:WPF - анимация EllipseGeometry в C# с использованием раскадровки
XAML:
<Image x:Name="rock" Stretch="None">
<Image.Clip>
<EllipseGeometry x:Name="rockClip" RadiusX="100" RadiusY="100" Center="200,150">
<EllipseGeometry.Transform>
<ScaleTransform/>
</EllipseGeometry.Transform>
</EllipseGeometry>
</Image.Clip>
</Image>
C#:
DoubleAnimation scaleX = new DoubleAnimation();
scaleX.BeginTime = TimeSpan.FromMilliseconds(fromMills);
scaleX.Duration = new Duration(TimeSpan.FromMilliseconds(2000));
scaleX.From = 0.0;
scaleX.To = 1.0;
scaleX.SetValue(Storyboard.TargetProperty, rockClip);
scaleX.SetValue(Storyboard.TargetPropertyProperty, new PropertyPath("(EllipseGeometry.Transform).(ScaleTransform.ScaleX)"));
DoubleAnimation scaleY = new DoubleAnimation();
scaleY.BeginTime = TimeSpan.FromMilliseconds(fromMills);
scaleY.Duration = new Duration(TimeSpan.FromMilliseconds(2000));
scaleY.From = 0.0;
scaleY.To = 1.0;
scaleY.SetValue(Storyboard.TargetProperty, rockClip);
scaleY.SetValue(Storyboard.TargetPropertyProperty, new PropertyPath("(EllipseGeometry.Transform).(ScaleTransform.ScaleY)"));
Storyboard storyboard = new Storyboard();
storyboard.Children.Add(scaleX);
storyboard.Children.Add(scaleY);
storyboard.Completed += storyboard_Completed;
animation.Begin();
Событие storyboard_Completed срабатывает, но там нет анимации на EllipseGeometry.
Где проблема?
Я могу оживить EllipseGeometry только таким образом:
DoubleAnimation scale = new DoubleAnimation();
scale.From = 0;
scale.To = 40;
scale.Duration = new Duration(TimeSpan.FromMilliseconds(5000));
rockClip.BeginAnimation(EllipseGeometry.RadiusXProperty, scale);
rockClip.BeginAnimation(EllipseGeometry.RadiusYProperty, scale);
мне нужно поставить этот DoubleAnimation в раскадровке, но я не знаю, как.
Спасибо.
Thanks Клеменс, он работает с помощью элемента управления изображения в качестве цели. Как я могу изменить начало преобразования рендера? Я попытался с помощью < ', но он не работает. Итак, я изменил CenterX/Y ' ', таким образом анимация заканчивается правильно (в середине изображения 400x300), но начинается в левом верхнем углу изображения (а не посередине). Как изменить начало преобразования рендеринга (возможно, используя значения 0..1)? Спасибо за вашу помощь. –
Andrea
Непонятно, чего именно вы хотите достичь. Сначала вы не анимируете RenderTransform, а трансформируете геометрию клипа. Если вы хотите сохранить центр геометрии клипа, вы не должны анимировать преобразование геометрии, а вместо этого оживите его RadiusX и RadiusY (как вы уже это сделали). – Clemens
Да, я хочу сохранить центр геометрии клипа. С 'RockClip.BeginAnimation (EllipseGeometry.RadiusXProperty, scale)' он отлично работает, но я не знаю, как разместить эту анимацию внутри раскадровки. Как я могу это достичь? Благодаря! – Andrea