В WPF вы можете просто анимировать линейный контроль.
<Canvas>
<Line x:Name="line"
X2="{Binding X1, RelativeSource={RelativeSource Mode=Self}}"
Y2="{Binding ActualHeight, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=Canvas}}" Stroke="Red" StrokeThickness="4">
</Line>
</Canvas>
Вы бы создать и запустить анимацию с помощью метода, как это:
private void StartAnimation()
{
var animation = new DoubleAnimation
{
To = ActualWidth, // width of the window
Duration = TimeSpan.FromSeconds(ActualWidth/32),
RepeatBehavior = RepeatBehavior.Forever
};
line.BeginAnimation(Line.X1Property, animation);
}
Вместо того, чтобы анимировать X1
свойство линии и пусть последующие X2
свойства путем связывания, вы могли бы также анимировать RenderTransform линии:
<Canvas>
<Line Y2="{Binding ActualHeight, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=Canvas}}" Stroke="Red" StrokeThickness="4">
<Line.RenderTransform>
<TranslateTransform x:Name="transform"/>
</Line.RenderTransform>
</Line>
</Canvas>
Метод StartAnimation теперь будет выглядеть так:
private void StartAnimation()
{
var animation = new DoubleAnimation
{
To = ActualWidth, // width of the window
Duration = TimeSpan.FromSeconds(ActualWidth/32),
RepeatBehavior = RepeatBehavior.Forever
};
transform.BeginAnimation(TranslateTransform.XProperty, animation);
}
Как быстро он будет двигаться? – Clemens
При 32 Гц, 32 пикселя в секунду – Muis