是否可以在wpf中设置一组控件的动画

本文关键字:一组 控件 动画 wpf 设置 是否 | 更新日期: 2023-09-27 18:22:07

我在wpf应用程序中有3个按钮。加载后,按钮应从应用程序的左侧平移到中心。我不想把动画应用到每个按钮上,有没有办法把这些按钮分组;然后将动画属性添加到将为按钮组设置动画的组中?

是否可以在wpf中设置一组控件的动画

您可以将按钮分组到一个容器(如网格)中,然后为容器设置动画。

另一种选择是将动画放在一个样式中,并将该样式应用于按钮,可以通过显式设置每个按钮的样式,也可以通过隐式设置按钮父级中按钮的默认样式(因此也是容器)

下面是一个使用样式的示例。

不幸的是,加载的窗口事件会被重复调用,因此动画会继续进行。我看到的唯一解决方案是在第一次之后设置布尔值,防止动画再次出现。

<Window x:Class="WpfApplication3.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow"
        Height="350"
        Width="525">
    <Grid>
        <Grid HorizontalAlignment="Center"
              VerticalAlignment="Center">
            <Grid.RowDefinitions>
                <RowDefinition Height="auto" />
                <RowDefinition Height="auto" />
                <RowDefinition Height="auto" />
            </Grid.RowDefinitions>
            <Grid.Resources>
                <Style TargetType="Button">
                    <Setter Property="Width"
                            Value="150" />
                    <Setter Property="Padding"
                            Value="15" />
                    <Setter Property="Margin"
                            Value="15" />
                    <Setter Property="RenderTransform">
                        <Setter.Value>
                            <TranslateTransform X="0" />
                        </Setter.Value>
                    </Setter>
                    <Style.Triggers>
                        <EventTrigger RoutedEvent="Window.Loaded">
                            <BeginStoryboard>
                                <Storyboard FillBehavior="HoldEnd">
                                    <DoubleAnimation Storyboard.TargetProperty="(Button.RenderTransform).(TranslateTransform.X)"
                                                     From="-150"
                                                     To="0"
                                                     RepeatBehavior="1"
                                                     Duration="0:0:2" />
                                </Storyboard>
                            </BeginStoryboard>
                        </EventTrigger>
                    </Style.Triggers>
                </Style>
            </Grid.Resources>
            <Button Grid.Row="0">Start</Button>
            <Button Grid.Row="1">Setup</Button>
            <Button Grid.Row="2">Quit</Button>
        </Grid>
    </Grid>
</Window>