WPF动画不稳定

时间:2019-05-01 17:56:31

标签: c# .net wpf animation wpf-controls

我正在尝试使用一些动画来使我的应用程序感觉良好。但是无论我做什么,我都忍不住断断续续的动画,它总是结结巴巴。

看看:

DoubleAnimation anim = new DoubleAnimation()
                 {
//ht is height of DockPanel, I wanted to start from 200 less than Actual DockPanel Height
                         From = ht - 200,
                         To = ht,
                         Duration = TimeSpan.FromSeconds(1),
                         AccelerationRatio = 0.5,
                         DecelerationRatio = 0.5
                     };
    x.BeginAnimation(HeightProperty, anim);
    //x is the UserControl

此外,我需要设置动画作为自定义 UserControl ,其中包含一些文字,例如100个单词和一堆图片。我只想让它在加载后立即增长到当前 DockPanel 的高度。

通过搜索解决方案,我看到的是这个

Timeline.SetDesiredFrameRate(anim, 10);

即使尝试任何值,也没有任何实际发生。

1 个答案:

答案 0 :(得分:0)

帧速率就像电影的帧速率。

低帧频会给您带来断断续续的电影或动荡的动画。

对于要制作动画的某些内容,使用底座面板可能不是一个好主意,因为每当您的高度发生变化时,它将尝试调整内容。

我建议您改用网格。

您应该使用scaletransform。部分原因是当您设置高度动画时,您会发现用户控件的所有内容都无效化了它们的度量,并且他们希望多次启动整个度量安排周期。

您是否正在考虑采取措施?然后阅读wpf布局系统的工作原理。

我也建议您使用xaml而不是代码。

以下是一些需要考虑的代码:

    private void StartAnimate_Click(object sender, RoutedEventArgs e)
    {
        var tran = testRectangle.RenderTransform = new ScaleTransform(1d, 1d)
        {
            CenterX = 0.5d,
            CenterY = 0.5d
        };
        var anim = new DoubleAnimation
        {
            To = 1.0,
            From=0,
            Duration = TimeSpan.FromSeconds(0.5d),
            DecelerationRatio = 0.5d,
            FillBehavior = FillBehavior.Stop
        };
        tran.BeginAnimation(
             ScaleTransform.ScaleYProperty,
             anim,
             HandoffBehavior.Compose);
    }

我将一个矩形和一个按钮放在了一个扩展面板中,以证明这是可行的。

<DockPanel>
    <Rectangle Fill="Blue" Name="testRectangle"
               Width="500"
    />
    <Button Content="Animate"
            HorizontalAlignment="Center"
            VerticalAlignment="Center"
            Name="StartAnimate"
            Click="StartAnimate_Click"  />
</DockPanel>

矩形很简单,但是动画效果很流畅。