如何使用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' 是您要旋转的椭圆