如何使用C#控制wpf中图像的旋转速度

时间:2015-03-24 17:10:48

标签: c# wpf image rotation

我需要在我的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#实现它?

2 个答案:

答案 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;是要旋转的椭圆