使用Storyboard在WPF触发器中平滑ExitAction

时间:2015-09-02 05:57:21

标签: c# wpf xaml wpf-animation

我有一个WPF应用程序,在这里我想覆盖丑陋的默认WPF样式。我已经创建了Styles.xaml字典,在这里我几乎完成了样式,但是在动画和不同视觉状态(触发器)之间的平滑过渡方面存在一些问题。

我的一个挑战是我不希望任何C#事件处理程序或其他C#代码绑定到样式。

这里我提供了一些关于触发器的代码:

<MultiTrigger>
    <MultiTrigger.Conditions>
        <Condition Property="IsEnabled" Value="True" />
        <Condition Property="IsMouseOver" Value="True" />
        <Condition Property="IsPressed" Value="False" />
    </MultiTrigger.Conditions>
    <MultiTrigger.EnterActions>
        <BeginStoryboard Name="MouseOverStoryboard">
            <Storyboard Duration="0:0:0.25" SlipBehavior="Grow">
                <ColorAnimation Storyboard.TargetName="InnerBorder" 
                                Storyboard.TargetProperty="Background.(SolidColorBrush.Color)" 
                                To="{StaticResource White}" 
                                BeginTime="0:0:0" Duration="0:0:0.25" />
                <DoubleAnimation Storyboard.TargetName="InnerBorder" 
                                 Storyboard.TargetProperty="Opacity" 
                                 To="0.3" 
                                 BeginTime="0:0:0" Duration="0:0:0.25" />
            </Storyboard>
        </BeginStoryboard>
    </MultiTrigger.EnterActions>
    <MultiTrigger.ExitActions>
        <RemoveStoryboard BeginStoryboardName="MouseOverStoryboard" />
    </MultiTrigger.ExitActions>
</MultiTrigger>

为了使动画流畅,我添加了EnterAction并将故事板放在这里,并且时间正确,因此输入动画很流畅,看起来很好。

我的第一个问题是关于在执行BeginStoryboard时如何恢复默认颜色,但后来我意识到我可以使用RemoveStoryboard。

现在我真的不知道我的想法是什么 - 如何顺利退出动画?我不应该使用RemoveStoryboard吗?

请提供建议。感谢。

P上。 S.我没有使用VisualStateManager,因为缺少状态,我不想为此实现自己的控件。

1 个答案:

答案 0 :(得分:1)

如何添加在输入动作动画持续时间结束时开始的新动画对象。 或者通过添加可以还原ExitAction的{​​{1}}来使用触发器的Storyboard属性。 或者您可以尝试将EnterAction属性设置为&#39;停止...

另一个选择是使用Fillbehavior来抓住EventSetterRoutedEvents {/ 1}}。