0

我尝试使用 和 实现具有不同高度的一组不同控件的Canvas动画Stackpanel

所以我填充Stackpanel并应用了所有设置,但无论如何,在开始的动画中跳跃了一段时间,只有在这一切顺利之后,当它结束时,它又会跳跃 2-3 次等等......

任何线索为什么?我使用经典的双重动画等......

谢谢你的任何线索!

<Canvas  ClipToBounds="True" Name="canMain" VerticalAlignment="Stretch" HorizontalAlignment="Stretch" >
   <StackPanel  Name="tbmarquee" HorizontalAlignment="Stretch"  ></StackPanel>
</Canvas> 

private void BottomToTopMarquee()
{
     tbmarquee.Orientation = Orientation.Vertical;  
     DoubleAnimation doubleAnimation = new DoubleAnimation();
     doubleAnimation.From = -tbmarquee.ActualHeight;
     doubleAnimation.To = canMain.ActualHeight;
     doubleAnimation.RepeatBehavior = RepeatBehavior.Forever;
     doubleAnimation.Duration = new Duration(TimeSpan.FromSeconds(_marqueeTimeInSeconds));
     tbmarquee.BeginAnimation(Canvas.BottomProperty, doubleAnimation);
 }

我什至试过这样

   Thread thread = new Thread(new ThreadStart(
            delegate()
            {
                DispatcherOperation dispatcherOp =
                  this.Dispatcher.BeginInvoke(DispatcherPriority.Normal, new Action(
                    delegate()
                    {

                        DoubleAnimation doubleAnimation = new DoubleAnimation();
                        doubleAnimation.From = -tbmarquee.ActualHeight;
                        doubleAnimation.To = canMain.ActualHeight;
                        doubleAnimation.RepeatBehavior = RepeatBehavior.Forever;
                        doubleAnimation.Duration = new Duration(TimeSpan.FromSeconds(_marqueeTimeInSeconds));
                        tbmarquee.BeginAnimation(Canvas.BottomProperty, doubleAnimation);
                    }));
                dispatcherOp.Completed += new EventHandler(DispatcherOpCompleted);
            }));
            thread.Start();

我的意思是动画开始并不顺利,它正在跳跃……但后来进展顺利……

4

1 回答 1

2

当我遇到动画性能问题时,我通常可以通过降低FrameRate和缓和对渲染系统的需求来缓解它们。在我的Application启动方法中,我添加了以下内容:

MediaTimeline.DesiredFrameRateProperty.OverrideMetadata(typeof(System.Windows.Media.Animation.Timeline), new FrameworkPropertyMetadata(10));

WPF 默认值为 60(这很荒谬,因为即使是现代视频也不会超过 30 FPS)。我通常会在 10 左右找到一个很好的性能平衡,但是您可以调整这个数字,直到您的动画看起来和执行您想要的那样。

我希望这有帮助。

于 2012-11-26T19:33:37.477 回答