使用抖动效果左右移动 WPF 窗口?

3

请问有人能向我展示如何从窗口当前位置进行动画。我正在寻找一种摇晃效果,简单地将窗口左右摇晃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 >

我已经成功实现了正确的摇晃效果,但我无法从窗口当前位置开始实现它。
<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 >

非常感谢您的帮助。

2个回答

6

将窗口的左侧属性设置为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,否则它将被设置为自动。当您尝试抖动窗口时,Left 的值为 NaN,会出现异常。


已经很久了,但我刚回来。谢谢阿里。 - darbid

1
你可以使用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”值。否则窗口将继续向右移动超出视野范围。 - LPL
哎,对不起两位。我的第一个代码片段实际上并不能正常工作。它确实会从屏幕上消失。我已经编辑了原帖。我不确定BounceEase是否是我要寻找的摇晃效果。这种震动表示错误,因此我更喜欢左右移动,大小,速度等相同的摇晃效果。 - darbid
只需确保将autoreverse属性设置为true,并正确设置repeat属性即可。 - Emond
感谢您更新您的电子邮件。但它仍然只是从屏幕上消失了。在我的搜索中,我在这里找到了类似的代码,那么我还需要设置什么?http://social.msdn.microsoft.com/Forums/vstudio/en-US/a40f7e0f-f1cc-410b-9b5f-eb0b46b085e7/problem-during-moving-window-using-doubleanimation - darbid
ElasticEase更适合这个目的(震动效果)。而且不需要AutoReverse - 使用From =“-100” To =“0”代替“By”,这样它就会从一定距离跳回原始位置,然后振荡。 - ai_enabled

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接