7
我已经实现以下方式网格控制的移动的动画:改进动画平滑度(控件移动)
<Grid
HorizontalAlignment="Center"
VerticalAlignment="Center">
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
</Grid.RowDefinitions>
<Grid.Style>
<Style TargetType="Grid">
<Style.Triggers>
<DataTrigger
Binding="{Binding ElementName=rootLayout, Path=IsVisible}"
Value="True">
<DataTrigger.EnterActions>
<BeginStoryboard>
<Storyboard>
<ThicknessAnimation
Storyboard.TargetProperty="Margin"
From="-500,0,0,0"
To="0,0,0,0"
Duration="0:0:0.5" />
</Storyboard>
</BeginStoryboard>
</DataTrigger.EnterActions>
</DataTrigger>
</Style.Triggers>
</Style>
</Grid.Style>
<Border
Grid.RowSpan="2"
Background="Black"
CornerRadius="6" >
<Border.Effect>
<DropShadowEffect />
</Border.Effect>
</Border>
<TextBlock
Grid.Row="0"
Width="400"
Height="200"
Margin="20,20,20,10"
Text="{Binding Path=MessageText}" />
<Button
Grid.Row="1"
Margin="20,5,20,15"
HorizontalAlignment="Right"
Width="75"
Content="OK"
Command="{Binding Path=CloseDialogCommand}" />
</Grid>
的动画作品很好,但它的丑陋。它摇摇晃晃/紧张/生涩,而且看起来确实不专业。有没有办法改善这一点?我是否正确地使用Margin
属性的值更改动画来移动网格?我已阅读RenderTransform
,但我不知道如何在我的情况下使用它。
此外,动画看起来不自然。我知道这可以改善,但我不知道如何。这些是什么性质,他们可以帮助我提高我的动画:
AccelerationRatio
DecelerationRatio
EasingFunction
IsAdditive
IsCumulative
SpeedRatio
感谢您的帮助!
P.S.我试图在XAML中放置尽可能多的代码,所以我更喜欢这种方法,但实际上,如果有什么需要改进的话...
谢谢你,这改善了我的动画。但有一点需要注意,动画在抖动方面的表现是相同的,但我认为这是由于相当短的时间 - 因此,使用渲染变换或厚度动画似乎产生了相同的结果。你提供的链接非常有用,特别感谢你。 – Boris 2011-04-15 08:54:34
我找到了一个页面,介绍了如何影响WPF应用程序的帧速率。该页面文章实际上解释了如何降低帧速率,但在我的情况下,我需要相反的。所以,我将帧率从默认的60增加到了120,现在应用程序动画就像一个魅力。这里是链接到文章http://marlongrech.wordpress.com/2008/06/13/wpf-reducing-cpu-consumption-for-animations/ – Boris 2011-04-15 12:22:08
问题是有多少用户会从中受益,如果显示器确实不支持足够高的刷新率,它看起来会比60fps更糟糕。 (我估计绝大多数便携式计算机的刷新频率为60Hz,默认情况下可能最适合,即使对于台式电脑,我怀疑你通常没有发现频率高于96Hz的原始频率) – 2011-04-15 12:40:44