c# - 摇动动画(3d版)

标签 c# wpf xaml animation shake

我想在出现错误时使用此动画,如显示的那样 here :

如何在 wpf 中实现?我觉得这应该是多个转换的组合(组合?),但具体是哪些转换以及如何转换?

这是一个开胃菜(mcve 或称它为“我的尝试”),它很丑,甚至离我想要的还差得很远:

<Grid>
    <Border x:Name="border"
            Width="200"
            Height="200"
            BorderBrush="Black"
            BorderThickness="1"
            CornerRadius="4"
            Background="LightBlue"
            RenderTransformOrigin="0.5,0">
        <Border.RenderTransform>
            <TransformGroup>
                <ScaleTransform />
                <SkewTransform />
                <RotateTransform />
                <TranslateTransform />
            </TransformGroup>
        </Border.RenderTransform>
        <Border.Effect>
            <DropShadowEffect BlurRadius="20" />
        </Border.Effect>
        <Button VerticalAlignment="Bottom"
                HorizontalAlignment="Center"
                Margin="0,0,0,10"
                Padding="5"
                Content="Click">
            <Button.Triggers>
                <EventTrigger RoutedEvent="Button.Click">
                    <BeginStoryboard>
                        <Storyboard FillBehavior="Stop">
                            <DoubleAnimation Storyboard.TargetName="border"
                                             Storyboard.TargetProperty="RenderTransform.Children[1].(SkewTransform.AngleX)"
                                             To="5" Duration="0:0:0.1"/>
                            <DoubleAnimation Storyboard.TargetName="border"
                                             Storyboard.TargetProperty="RenderTransform.Children[1].(SkewTransform.AngleX)"
                                             To="-5"
                                             BeginTime="0:0:0.1"
                                             Duration="0:0:0.2" />
                            <DoubleAnimation Storyboard.TargetName="border"
                                             Storyboard.TargetProperty="RenderTransform.Children[1].(SkewTransform.AngleX)"
                                             To="5"
                                             BeginTime="0:0:0.3"
                                             Duration="0:0:0.2" />
                            <DoubleAnimation Storyboard.TargetName="border"
                                             Storyboard.TargetProperty="RenderTransform.Children[1].(SkewTransform.AngleX)"
                                             BeginTime="0:0:0.5"
                                             Duration="0:0:0.1" />
                        </Storyboard>
                    </BeginStoryboard>
                </EventTrigger>
            </Button.Triggers>
        </Button>
    </Border>
</Grid>

周围有很多 2d shake 帖子(clickclick),但我需要告诉“你错了” 的动画,而不是说“让我们跳舞”的动画。

最佳答案

目前为止最好的效果可以这样实现:

<Grid>
    <Border Width="200"
            Height="200"
            BorderBrush="Black"
            BorderThickness="1"
            CornerRadius="4"
            Background="LightBlue"
            RenderTransformOrigin="0.5,0">
        <Border.RenderTransform>
            <RotateTransform x:Name="transform" />
        </Border.RenderTransform>
        <Border.Effect>
            <DropShadowEffect BlurRadius="20" />
        </Border.Effect>
        <Button VerticalAlignment="Bottom"
                HorizontalAlignment="Center"
                Margin="0,0,0,10"
                Padding="5"
                Content="Click">
            <Button.Triggers>
                <EventTrigger RoutedEvent="Button.Click">
                    <BeginStoryboard>
                        <Storyboard FillBehavior="Stop">
                            <DoubleAnimation Storyboard.TargetName="transform"
                                             Storyboard.TargetProperty="Angle"
                                             From="5"
                                             Duration="0:0:0.5">
                                <DoubleAnimation.EasingFunction>
                                    <ElasticEase EasingMode="EaseOut"
                                                 Oscillations="2"
                                                 Springiness="1" />
                                </DoubleAnimation.EasingFunction>
                            </DoubleAnimation>
                        </Storyboard>
                    </BeginStoryboard>
                </EventTrigger>
            </Button.Triggers>
        </Button>
    </Border>
</Grid>

这给人一种身临其境的感觉“出了点问题”。在出现更好的答案之前,我很满意。

关于c# - 摇动动画(3d版),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31918334/

相关文章:

wpf - Expression Blend、一个 ItemTemplate 和一个隐式样式

.net - 缩放 View 框内所有控件的高度和宽度

c# - 有没有办法在 java 中使用类似于 c# 's at quoting (@"") 的东西

c# - 使用 C# 将文本粘贴到事件的 Word 窗口

c# - 对象关系映射

c# - 无法在 WPF 中创建继承的用户控件,本地命名空间中的基本控件 "does not exist"

c# - Entity Framework 中 DataGrid (WPF) 的优雅过滤

wpf - 如何使用带有 MVVM 模型的 WPF 数据绑定(bind)来使用自定义控件填充 StackPanel

c# - 如何按工作日的顺序(如日历周)而不是字母顺序(在 C# 中)排序?

c# - 这段 C# 代码如何得出答案?