如何使用C#控制wpf中图像的旋转速度
How to control the speed of rotation of image in wpf using C#
我需要在我的 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#实现它?
你的问题有点乱,因为标题要求控制速度,而问题文本指的是恒速。
无论如何使用动画你可以控制一个角度的开始位置和结束位置,无论值适合你,你指定它应该花费的时间。
下面的例子是当我必须加载需要超过 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>
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();
其中 'ellipseToRotate' 是您要旋转的椭圆
我需要在我的 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#实现它?
你的问题有点乱,因为标题要求控制速度,而问题文本指的是恒速。 无论如何使用动画你可以控制一个角度的开始位置和结束位置,无论值适合你,你指定它应该花费的时间。
下面的例子是当我必须加载需要超过 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>
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();
其中 'ellipseToRotate' 是您要旋转的椭圆