【问题标题】:Animate a WPF Window left and right with a shake effect?使用抖动效果左右动画 WPF 窗口?
【发布时间】:2014-07-30 17:02:30
【问题描述】:

谁能告诉我如何从当前位置为窗口设置动画。我正在寻找一种摇动效果,它只是左右摇晃窗口 5 到 6 次。

我了解我需要使用 Animation.By。这是我已经开始但还没有走远的事情。

但这不起作用。

<Storyboard x:Key="sbShake1" FillBehavior="Stop">
    <DoubleAnimation Storyboard.TargetName="W1" Storyboard.TargetProperty ="(Window.Left)"
                     By="10" Duration="0:0:1">
    </DoubleAnimation >
</Storyboard >

我已经设法获得了正确的抖动效果,但我无法从 windows 当前位置做到这一点。

<Storyboard x:Key="sbShake" RepeatBehavior ="00:00:01" SpeedRatio ="25" >
    <DoubleAnimationUsingKeyFrames Storyboard.TargetProperty ="Left">
        <SplineDoubleKeyFrame KeyTime ="00:00:00.1000000" Value ="-10"/>
        <SplineDoubleKeyFrame KeyTime ="00:00:00.3000000" Value ="0"/>
        <SplineDoubleKeyFrame KeyTime ="00:00:00.5000000" Value ="10"/>
        <SplineDoubleKeyFrame KeyTime ="00:00:00.7000000" Value ="0"/>
    </DoubleAnimationUsingKeyFrames >
</Storyboard >

我们将不胜感激。

【问题讨论】:

    标签: c# wpf animation wpf-controls


    【解决方案1】:

    将窗口的 Left 属性设置为 500 并添加以下代码:

    <Window.Triggers>
        <EventTrigger RoutedEvent="Window.MouseDown" >
            <EventTrigger.Actions>
                <BeginStoryboard>
                    <Storyboard TargetProperty="Left">
                        <DoubleAnimation From="500" To="515" Duration="0:0:0.05"
                                         AutoReverse="True" RepeatBehavior="3x"
                                         FillBehavior="Stop"/>
                    </Storyboard>
                </BeginStoryboard>
            </EventTrigger.Actions>
        </EventTrigger>
    </Window.Triggers>
    

    当你没有提到From="x"时,你应该手动设置Window的属性Left,否则它设置为Auto,当你尝试摇动你的窗口时,Left的值是NaN并且会抛出异常.

    【讨论】:

    • 已经很久了,但我才刚刚回来。谢谢你,阿里。
    【解决方案2】:

    您可以使用a BounceEase 使窗口抖动:

    <Storyboard x:Name="myStoryboard">
        <DoubleAnimation By="10" Duration="00:00:3"
                         AutoReverse="True" RepeatBehavior="1"
                         Storyboard.TargetName="W1" 
                         Storyboard.TargetProperty="Left">
            <DoubleAnimation.EasingFunction>
                <BounceEase Bounces="2" EasingMode="EaseOut" 
                            Bounciness="2" />
            </DoubleAnimation.EasingFunction>
        </DoubleAnimation>
    </Storyboard>
    

    【讨论】:

    • 对我来说,这只适用于 From 值。否则窗口会一直向右移动到看不见的地方。
    • 对不起,对不起。我的第一个代码 sn-p 实际上不起作用。它确实一直在屏幕外。我已经编辑了我的原始帖子。我不确定 BounceEase 是不是我正在寻找的那种震动。这种摇晃表示一个错误,因此希望只进行大小、速度等相同的左右移动。
    • 只需确保将 autoreverse 属性设置为 true 并重复属性正确
    • 感谢您更新您的电子邮件。但它仍然只是从屏幕上消失。我在搜索中找到了类似的代码,所以我还需要设置什么? social.msdn.microsoft.com/Forums/vstudio/en-US/…
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-05
    • 1970-01-01
    • 1970-01-01
    • 2011-06-01
    相关资源
    最近更新 更多