我正在尝试使用一些动画来使我的应用程序感觉良好。但是无论我做什么,我都忍不住断断续续的动画,它总是结结巴巴。
看看:
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);
即使尝试任何值,也没有任何实际发生。
答案 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>
矩形很简单,但是动画效果很流畅。