从同一个点击事件中调用两个不同的动画

Posted

技术标签:

【中文标题】从同一个点击事件中调用两个不同的动画【英文标题】:Calling two different animations from the same click event 【发布时间】:2010-03-16 10:57:03 【问题描述】:

我目前正在开发一个 Surface 应用程序,我需要在点击按钮时调用两个不同的动画。

我应该怎么做呢?如果可能的话,我想以声明方式进行。我应该为此使用 MultiTriggers,还是?

提前致谢!

【问题讨论】:

【参考方案1】:

您可以使用 EventTrigger 来做到这一点。

您可以在按钮和动画目标的任何容器的 FrameworkElement.Triggers 属性中定义触发器。

    <StackPanel
        Orientation="Horizontal">

        <StackPanel.Triggers>

            <EventTrigger
                SourceName="TheButton"
                RoutedEvent="Button.Click">

                <BeginStoryboard>
                    <Storyboard>
                        <ColorAnimation
                            Storyboard.TargetName="LimeRect"
                            Storyboard.TargetProperty="Fill.Color"
                            To="Red" />
                        <ColorAnimation
                            Storyboard.TargetName="RedRect"
                            Storyboard.TargetProperty="Fill.Color"
                            To="Lime" />
                    </Storyboard>
                </BeginStoryboard>

            </EventTrigger>

        </StackPanel.Triggers>


        <Button
            x:Name="TheButton"
            Content="Play" />

        <Rectangle
            x:Name="LimeRect"
            Fill="Lime"
            Width="50"
            Height="50" />

        <Rectangle
            x:Name="RedRect"
            Fill="Red"
            Width="50"
            Height="50" />

    </StackPanel>

如果您的目标有相对路径,您可以使用Storyboard.Target="Binding PathToTarget" 代替Storyboard.TargetName="TargetName"

编辑:(见 cmets)

如果您要为按钮本身设置动画,则可以将触发器直接放在按钮中,并且不需要任何目标名称。

示例 - 为 ToggleButton 的大小设置动画:

    <ToggleButton
        Content="Toggle"
        Width="50"
        Height="50">

        <ToggleButton.Triggers>

            <EventTrigger
                RoutedEvent="ToggleButton.Checked">
                <BeginStoryboard>
                    <Storyboard>
                        <DoubleAnimation
                            Duration="00:00:00.2"
                            Storyboard.TargetProperty="Width"
                            To="100" />
                        <DoubleAnimation
                            Duration="00:00:00.2"
                            Storyboard.TargetProperty="Height"
                            To="100" />
                    </Storyboard>
                </BeginStoryboard>
            </EventTrigger>

            <EventTrigger
                RoutedEvent="ToggleButton.Unchecked">
                <BeginStoryboard>
                    <Storyboard>
                        <DoubleAnimation
                            Duration="00:00:00.2"
                            Storyboard.TargetProperty="Width"
                            To="50" />
                        <DoubleAnimation
                            Duration="00:00:00.2"
                            Storyboard.TargetProperty="Height"
                            To="50" />
                    </Storyboard>
                </BeginStoryboard>
            </EventTrigger>

        </ToggleButton.Triggers>

    </ToggleButton>

【讨论】:

嘿 omsdsmr,感谢您的回答 :) 非常感谢!我明白你的意思,但在这种情况下,需要动画的是按钮本身。即:当你点击它时,它会变大,当你再次点击它时,它会恢复到正常大小.. 啊...你很幸运,你想要的实际上比我想象的要容易。我用另一个例子更新了我的答案。祝你好运。 omdsmr:我想这可能就是我要找的东西 :) 我明天去办公室时会尝试一下,我会告诉你效果如何。非常感谢您的帮助! 嘿 omdsmr,我现在玩弄了切换按钮控件,它工作得非常好!正是我想要的 :) 感谢您的意见!

以上是关于从同一个点击事件中调用两个不同的动画的主要内容,如果未能解决你的问题,请参考以下文章

帮我更改一下button点击效果 水纹效果。

CSS3在动画元素上旋转导致点击事件不调用

iOS Swift 给动画添加点击事件

使用 vue-test-utils 测试两个不同的点击事件

jQuery:绑定和取消绑定实时点击事件

移动端300ms的点击延迟以及解决方案