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

时间:2013-07-12 04:15:31

标签: c# wpf xaml storyboard

我在wpf应用程序中有3个按钮。加载后,按钮应从应用程序的左侧转换为中心。我不想将动画应用于每个按钮,是否有任何方法可以对这些按钮进行分组。然后将动画属性添加到将为按钮组设置动画的组?

1 个答案:

答案 0 :(得分:1)

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

另一种方法是将动画放入样式并将样式应用于按钮,可以通过设置每个按钮的样式显式地设置,也可以通过设置按钮父级中按钮的默认样式来隐式显示(依次为容器)

以下是使用样式的示例。

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

<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>