我有简单的图形图像,我想在触发事件上进行转换。变换意味着改变宽度或将其移动到另一个位置。
现在我使用工具箱的Image元素和Storyboard的Animations,例如DoubleAnimation或ThicknessAnimation。
但是出现以下问题:
关于1.我的问题是,是否应该使用其他动画。
所以我尝试了转换,请参阅代码:
<Image Height="150" HorizontalAlignment="Left" Margin="12,0,0,0" Name="image1" Stretch="Fill" VerticalAlignment="Top" Source="images/side_view.jpg" Width="1244">
<Image.RenderTransform>
<ScaleTransform x:Name="Minimize" ScaleX="1.0" ScaleY="1.0"/>
</Image.RenderTransform>
</Image>
<Button Content="Next Train" Height="23" HorizontalAlignment="Left" Margin="528,233,0,0" Name="btnNext" VerticalAlignment="Top" Width="75" />
<Grid.Triggers>
<EventTrigger RoutedEvent="Button.Click" SourceName="btnNext">
<BeginStoryboard>
<Storyboard TargetName="Minimize" TargetProperty="ScaleX">
<DoubleAnimation To="0.65" Duration="0:0:2"/>
</Storyboard>
</BeginStoryboard>
</EventTrigger>
与我应用于宽度和边距的动画相同。但是,它仍然闪烁!有没有合理的解释?
答案 0 :(得分:2)
如果您要为图像的宽度设置动画,则会使WPF重新渲染图像,并且每次都从scatch创建它。它经历了布局过程和渲染过程,这使得它闪烁并且不能尽可能地工作。
这里最好的选择是为ScaleTransform设置动画。 ScaleTransform完全通过DirectX在硬件中完成,因此速度极快,不会闪烁,图像质量应该保持完全相同。 (除非您正在大幅度调整它,否则您将失去优点。)