中断的WPF动画反向慢得多

时间:2014-10-24 18:19:20

标签: c# wpf animation

这是我的代码:

XAML:

  <Grid>

    <Grid.RowDefinitions>
      <RowDefinition></RowDefinition>
      <RowDefinition></RowDefinition>
    </Grid.RowDefinitions>

    <Button Padding="10" Name="cmdGrow" Click="cmdGrow_Click" Height="40" Width="160"
            HorizontalAlignment="Center" VerticalAlignment="Center" Content="Grow Button #1 "></Button>
    <Button Grid.Row="1" Padding="10" Name="cmdShrink" Click="cmdShrink_Click"
            HorizontalAlignment="Center" VerticalAlignment="Center" Content="Shrink Button #1"></Button>

    </Grid>

代码隐藏:

namespace Animation
{
    public partial class CodeAnimation : System.Windows.Window
    {
        public CodeAnimation()
        {
            InitializeComponent();
        }

        private void cmdGrow_Click(object sender, RoutedEventArgs e)
        {
            DoubleAnimation widthAnimation = new DoubleAnimation();

            widthAnimation.Duration = TimeSpan.FromSeconds(5);
            widthAnimation.To = 270;

            cmdGrow.BeginAnimation(Button.WidthProperty, widthAnimation);
        }

        private void cmdShrink_Click(object sender, RoutedEventArgs e)
        {
            DoubleAnimation widthAnimation = new DoubleAnimation();

            widthAnimation.Duration = TimeSpan.FromSeconds(5);
            //widthAnimation.To = 20;

            cmdGrow.BeginAnimation(Button.WidthProperty, widthAnimation);
        }
    } 
}

导致以下简单的UI:

在cmdShrink_Click()事件中,如果未指定动画的“To”属性,则反向动画(即“缩小”)比前向(即“增长”)动画慢。我通过在cmdShrink_click()事件中放置一个断点检查了Duration属性,它显示为5秒:

要重新制作,请点击“增长”按钮,然后在增长动画完成之前点击中途的缩小按钮

好像多个动画的持续时间都有累积效应。

我使用的是Windows 7,.NET FW 4 Client Profile,VS 2010。

1 个答案:

答案 0 :(得分:2)

动画较慢,因为它必须在相同的时间(5秒)内覆盖较小的尺寸差异。增长动画的速度基于其预期的最终尺寸,但您缩短了动画。如果你在中途停止增长动画,那么缩小动画需要覆盖的距离是增长动画预期要覆盖的距离的一半,但是你仍然需要花费整整五秒钟。为了在相同的时间内覆盖一半的距离,它以一半的速度进行。