最初我有一个DataTrigger,它将可见性设置为collapse:
<DataTrigger Binding="{Binding Confidence}" Value="0">
<Setter Property="Visibility" Value="Collapsed" />
</DataTrigger>
我想要平滑的FadeOut/FadeIn动画而不是设置可见性,其中FadeOut比FadeIn动画慢,所以我使用了DataTrigger的EnterActions和ExitAction:
<Storyboard x:Key="FadeOutStoryboard" Duration="0:0:1">
<DoubleAnimation Storyboard.TargetProperty="Opacity" To="0" />
</Storyboard>
<Storyboard x:Key="FadeInStoryboard" Duration="0:0:0.2">
<DoubleAnimation Storyboard.TargetProperty="Opacity" To="1" />
</Storyboard>
<DataTrigger Binding="{Binding Confidence}" Value="0">
<DataTrigger.EnterActions>
<BeginStoryboard Storyboard="{StaticResource FadeOutStoryboard}" />
</DataTrigger.EnterActions>
<DataTrigger.ExitActions>
<BeginStoryboard Storyboard="{StaticResource FadeInStoryboard}" />
</DataTrigger.ExitActions>
</DataTrigger>
问题是,有时UIElement保持半透明,没有动画运行
置信度属性是实时变化的,但是当UIElement是半透明的时候,这个值总是大于0。
我也试过停止故事板,但这并没有解决问题。
<DataTrigger Binding="{Binding Confidence}" Value="0">
<DataTrigger.EnterActions>
<StopStoryboard BeginStoryboardName="BeginFadeIn" />
<BeginStoryboard x:Name="BeginFadeout" Storyboard="{StaticResource FadeOutStoryboard}" />
</DataTrigger.EnterActions>
<DataTrigger.ExitActions>
<StopStoryboard BeginStoryboardName="BeginFadeout" />
<BeginStoryboard x:Name="BeginFadeIn" Storyboard="{StaticResource FadeInStoryboard}" />
</DataTrigger.ExitActions>
</DataTrigger>
我需要明确地设置动画的持续时间,而不仅仅是在Storyboard上:
动画似乎没有从storyboard继承持续时间,并且有一些默认的持续时间。
当在storyboard上设置持续时间并且持续时间小于动画时,动画将被剪切。
持续时间的十进制值出现问题。您可以选择不同的缓动功能,在相同的持续时间内模拟更快的动画效果,如下所示:缓和模式的MSDN参考。
<Storyboard x:Key="FadeInStoryboard" Duration="0:0:1">
<DoubleAnimation Storyboard.TargetProperty="Opacity" From="0" To="1">
<DoubleAnimation.EasingFunction>
<BackEase Amplitude='1' EasingMode='EaseIn' />
</DoubleAnimation.EasingFunction>
</DoubleAnimation>
</Storyboard>