WPF制作抖动按钮

时间:2022-07-21 10:17:07

在WPF中,Transform类可以非常方便的实现旋转、缩放、扭曲和平移操作,一两行代码就能达到意想不到的效果。更让人欣喜的是Transform 还支持动画,这样可以让我们十分简单的在UI上实现很多有趣的动画。下面就介绍一个通过RotateTransform 的动画实现按钮抖动的例子。

原理很简单:通过将RotateTransform 的Angle属性进行动画绑定,使按钮来回旋转。

问了更好的显示抖动效果,我们给按钮加上一个圆形的图标icon.png。

WPF制作抖动按钮

下面给按钮写一个抖动的样式:

<Style x:Key="shakeButtonStyle" TargetType="{x:Type ButtonBase}">
        <Setter Property="RenderTransformOrigin" Value="0.5,0.5"/>
        <Setter Property="RenderTransform">
            <Setter.Value>
                <RotateTransform Angle="0"/>
            </Setter.Value>
        </Setter>
        <Style.Triggers>
            <EventTrigger RoutedEvent="ButtonBase.Click">
                <BeginStoryboard>
                    <Storyboard>
                        <DoubleAnimation Storyboard.TargetProperty="(UIElement.RenderTransform).(RotateTransform.Angle)"
                                                 From="-30" To="30" Duration="0:0:0.09" AutoReverse="True" RepeatBehavior="2x" FillBehavior="Stop"/>
                    </Storyboard>
                </BeginStoryboard>
            </EventTrigger>
        </Style.Triggers>
    </Style>

通过动画,我们将按钮从-30°旋转到30°,然后在旋转回来,重复此动作2次,所有的动作在900毫秒内完成。就是旋转抖动效果了。

下面是应用了该样式的按钮。

<Button VerticalAlignment="Center" Width="48" Background="Transparent" BorderThickness="0" Style="{StaticResource shakeButtonStyle}">
                <Image Source="icon.png"/>
</Button>
如果不想使用旋转抖动,而是上下抖动或者左右抖动,可以将RotateTransform类换成 TranslateTransform 类。如果想要向心脏收缩跳动一样的抖动,可以使用ScaleTransform 类。