C# 动画控制旋转

C# 动画控制旋转,c#,wpf,expression-blend,C#,Wpf,Expression Blend,我定义了一个简单的控件,就是一个红色的正方形,里面有一个黑色的三角形。当用户单击控件时,我想将黑色三角形旋转180度。我需要设置旋转的动画。下面是控件(和主窗口)的xaml- 我尝试在按下控件时在控件上设置一个触发器进行旋转,但似乎没有IsPressed属性(但出于某种原因,存在IsMouseOver属性)。那么,当IsPressed属性不可用时,我如何触发旋转呢 如何使这成为动画旋转 我建议您通过Microsoft Expression Blend 3或4版创建动画;在这种情况下(即动画

我定义了一个简单的控件,就是一个红色的正方形,里面有一个黑色的三角形。当用户单击控件时,我想将黑色三角形旋转180度。我需要设置旋转的动画。下面是控件(和主窗口)的xaml-


  • 我尝试在按下控件时在控件上设置一个触发器进行旋转,但似乎没有IsPressed属性(但出于某种原因,存在IsMouseOver属性)。那么,当IsPressed属性不可用时,我如何触发旋转呢
  • 如何使这成为动画旋转

  • 我建议您通过Microsoft Expression Blend 3或4版创建动画;在这种情况下(即动画),用xaml编写代码非常困难


    祝你好运。

    我建议你通过Microsoft Expression Blend 3或4版创建动画;在这种情况下(即动画),用xaml编写代码非常困难


    祝你好运。

    你可以使用
    EventTrigger
    并收听
    MouseLeftButtonDown
    事件

    对于旋转,要旋转的路径需要如下所示:

    <Path ...>
        <Path.RenderTransform>
            <RotateTransform />
        </Path.RenderTransform>
    </Path>
    
    
    
    动画本身如下所示(持续时间为半秒):

    
    

    但是,正如Hothreeyn已经指出的那样,使用Blend显然更容易。

    您可以使用
    EventTrigger
    并收听
    MouseLeftButtonDown
    事件

    对于旋转,要旋转的路径需要如下所示:

    <Path ...>
        <Path.RenderTransform>
            <RotateTransform />
        </Path.RenderTransform>
    </Path>
    
    
    
    动画本身如下所示(持续时间为半秒):

    
    

    但是,正如Hothreeyn已经指出的那样,使用Blend显然更简单。

    您需要在路径中添加一个MouseDown事件,一个将启动故事板的事件触发事件。我为您采样并在Expression Blend中创建了请求的旋转。若要更改,可以在情节提要“OnMouseDown1”中更改旋转度


    您需要将MouseDown事件添加到路径中,这是一个事件触发事件,将启动故事板。我为您采样并在Expression Blend中创建了请求的旋转。若要更改,可以在情节提要“OnMouseDown1”中更改旋转度

    
    
    iPressed属性适用于需要在网格或边框上使用OnMouseLeftDown/Up的更高控件(按钮)。你可以在Expression blend中制作动画,我想说的是,试着找一本关于WPF和动画的书,然后你会很快学会。iPressed属性适用于更高的控件(按钮),你需要使用OnMouseLeftDown/Up作为网格或边框。你可以在Expression blend中制作动画,我会说,试着找一本关于WPF和动画的书,然后你会很快学会它。
    <DoubleAnimation BeginTime="0"
                     Duration="0:0:0.5"
                     To="180"
                     Storyboard.TargetName="nameOfThePath"
                     Storyboard.TargetProperty="(UIElement.RenderTransform).(RotateTransform.Angle)" />
    
     <Window.Resources>
        <ControlTemplate x:Key="ControlControlTemplate1" TargetType="{x:Type Control}">
            <ControlTemplate.Resources>
                <Storyboard x:Key="OnMouseDown1">
                    <DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.RenderTransform).(TransformGroup.Children)[2].(RotateTransform.Angle)" Storyboard.TargetName="myPath">
                        <EasingDoubleKeyFrame KeyTime="0:0:1" Value="180"/>
                    </DoubleAnimationUsingKeyFrames>
                </Storyboard>
            </ControlTemplate.Resources>
            <Grid>
                <Border Background="Red"/>
                <Path Grid.Row="1" x:Name="myPath" Visibility="Visible" Data="M0,0 L1,0 0.5,1 z" Stretch="Fill"  
                Width="80" Height="60" Fill="Black" Opacity="1" 
                VerticalAlignment="Center" HorizontalAlignment="Center" RenderTransformOrigin="0.5,0.4">
                    <Path.RenderTransform>
                        <TransformGroup>
                            <ScaleTransform/>
                            <SkewTransform/>
                            <RotateTransform/>
                            <TranslateTransform/>
                        </TransformGroup>
                    </Path.RenderTransform>
                </Path>
            </Grid>
            <ControlTemplate.Triggers>
                <EventTrigger RoutedEvent="Mouse.MouseDown" SourceName="myPath">
                    <BeginStoryboard Storyboard="{StaticResource OnMouseDown1}"/>
                </EventTrigger>
            </ControlTemplate.Triggers>
        </ControlTemplate>
        <Storyboard x:Key="OnMouseDown1">
            <DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.RenderTransform).(TransformGroup.Children)[2].(RotateTransform.Angle)" Storyboard.TargetName="control">
                <EasingDoubleKeyFrame KeyTime="0:0:1" Value="180"/>
            </DoubleAnimationUsingKeyFrames>
        </Storyboard>
    </Window.Resources>
    
    <Grid x:Name="LayoutRoot">
        <Control x:Name="control" HorizontalAlignment="Left" Height="100" VerticalAlignment="Top" Width="100" Template="{DynamicResource ControlControlTemplate1}" RenderTransformOrigin="0.5,0.5">
            <Control.RenderTransform>
                <TransformGroup>
                    <ScaleTransform/>
                    <SkewTransform/>
                    <RotateTransform/>
                    <TranslateTransform/>
                </TransformGroup>
            </Control.RenderTransform>
        </Control>
    </Grid>