WPF中如果我设置完动画,再通过其他的设置来修改动画中的属性时,那这些属性就被锁住了,这时这个属性是不能够设置的。有很多种方法可以来把这个动画解锁。我做了一个小的Demo来设置这个值。
<DockPanel LastChildFill="True"> <StackPanel DockPanel.Dock="Bottom" Orientation="Horizontal" HorizontalAlignment="Center"> <Button Name="cmdStart" Height="50" Width="100" Margin="10" Click="Button_Click">Start</Button> <Button Height="50" Width="100" Margin="10" Click="ButtonSet_Click">Set</Button> <Button Height="50" Width="100" Margin="10" Click="ButtonStop_Click">Stop</Button> </StackPanel> <Label DockPanel.Dock="Top" Name="label" HorizontalContentAlignment="Center" Content="{Binding ElementName=button,Path=Width}" Width="200" Height="200" FontSize="50"/> <Button Name="button" Width="0"/> </DockPanel>
public partial class MainWindow : Window { PauseStoryboard story = new PauseStoryboard(); DoubleAnimation animation = new DoubleAnimation(); public MainWindow() { InitializeComponent(); } private void Button_Click(object sender, RoutedEventArgs e) { animation.From = 0; animation.To = 100; animation.Duration = TimeSpan.FromSeconds(5); button.BeginAnimation(Button.WidthProperty, animation); } private void ButtonStop_Click(object sender, RoutedEventArgs e) { var temp = (double)button.GetValue(Button.WidthProperty); button.BeginAnimation(Button.WidthProperty, null); button.Width = temp; } private void ButtonSet_Click(object sender, RoutedEventArgs e) { button.Width = 20; } }
由上面的例子可以看到当我开始这个动画后,如果你直接点击Set的话这个属性是不能设置的。当你点击Stop时,如果你直接只用上这句话:
button.BeginAnimation(Button.WidthProperty, null);
那么设置将停止时,他的动画会回到原点,这样也可以继续设置值。而我上面的这个方法是使动画还在原来的位置停住,继而继续设置值。这两种根据个人的需要来选择。这个只是其中的一种。还有许多方法来设置值。可以参考下面这个blog,里面把所有的可能用到的停止方法都用到了:http://www.cnblogs.com/alamiye010/archive/2009/08/26/1554539.html