我在 wpf 应用程序中有 3 个按钮。加载后,按钮应从左侧平移到应用程序的中心。我不想将动画应用于每个按钮,有没有办法对这些按钮进行分组,然后将动画属性添加到将为按钮组设置动画的组中?
问问题
889 次
1 回答
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>
于 2013-07-12T04:33:06.590 回答