我需要在我的wpf应用程序中旋转图像。基本上这个图像是一个轮子,它需要在按钮点击事件后旋转。在我的xaml中,我将此图像定义如下: -
<Ellipse Name="wheel" Canvas.Left="244.813" Canvas.Top="39" Height="525" Width="525" RenderTransformOrigin="0.5,0.5">
<Ellipse.Fill>
<ImageBrush x:Name="imgwheel" Stretch="Uniform" />
</Ellipse.Fill>
<Ellipse.RenderTransform>
<RotateTransform x:Name="rtWheel" CenterX="0" CenterY="0" />
</Ellipse.RenderTransform>
</Ellipse>
可以使用RotateTransform rotateTransform = new RotateTransform(angle);
旋转此图像,其中angle
是定义旋转角度的变量。我的问题是创建一个动画意味着轮子应该以恒定的速度旋转10秒,它应该停止在描述的角度。如何使用C#实现它?
答案 0 :(得分:1)
你的问题有点混乱,因为标题要求控制速度,而问题文本指的是恒定速度。 无论如何使用动画,您可以控制角度的起始位置和结束位置,无论您适合哪种值,并指定它应该花费的时间。
下面的示例是当我需要加载超过1秒的内容时我自己使用的动画:
<DataTemplate x:Key="RowLoadingTemplate">
<Image x:Name="Image" Source="/Interstone.Bestelbonnen;component/Images\loading.png" Visibility="Hidden" RenderTransformOrigin="0.5,0.5">
<Image.RenderTransform>
<RotateTransform x:Name="Rotator" Angle="0"/>
</Image.RenderTransform>
</Image>
<DataTemplate.Triggers>
<DataTrigger Binding="{Binding IsLoading}" Value="True">
<DataTrigger.Setters>
<Setter TargetName="Image" Property="Visibility" Value="Visible"/>
</DataTrigger.Setters>
<DataTrigger.EnterActions>
<BeginStoryboard>
<Storyboard>
<DoubleAnimation Storyboard.TargetName="Rotator" Storyboard.TargetProperty="Angle" To="360" Duration="0:0:1"
/>
</Storyboard>
</BeginStoryboard>
</DataTrigger.EnterActions>
</DataTrigger>
</DataTemplate.Triggers>
</DataTemplate>
答案 1 :(得分:0)
XAML
这将旋转它(将它放在你的椭圆标签中):
<Ellipse.Triggers>
<EventTrigger RoutedEvent="Loaded">
<BeginStoryboard>
<Storyboard>
<DoubleAnimation Storyboard.TargetProperty="(Ellipse.RenderTransform).(RotateTransform.Angle)" To="360" Duration="0:0:10"/>
</Storyboard>
</BeginStoryboard>
</EventTrigger>
</Ellipse.Triggers>
基本上设置从加载椭圆时开始的旋转动画
C#
Storyboard storyboard = new Storyboard();
storyboard.Duration = new Duration(TimeSpan.FromSeconds(10));
DoubleAnimation rotateAnimation = new DoubleAnimation()
{
From = 0,
To = 360,
Duration = storyboard.Duration,
RepeatBehavior= new RepeatBehavior(1)
};
Storyboard.SetTarget(rotateAnimation, ellipseToRotate);
Storyboard.SetTargetProperty(rotateAnimation, new PropertyPath("(Ellipse.RenderTransform).(RotateTransform.Angle)"));
storyboard.Children.Add(rotateAnimation);
storyboard.Begin();
其中&#39; ellipseToRotate&#39;是要旋转的椭圆