1

我有一个 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 并将 Storyboard 放在这里,因此输入动画流畅且看起来不错。

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

现在我真的不知道我的想法已经出来了 - 如何制作平滑的退出动画?我不应该使用 RemoveStoryboard 吗?

请提供建议。谢谢。

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

4

1 回答 1

1

如何添加一个在输入动作动画持续时间过去时开始的新动画对象。或者如何ExitAction通过添加一个Storyboard还原您的触发器来使用触发器的属性EnterAction。或者您可以尝试将Fillbehavior属性设置为“停止...

另一种选择是使用 an来EventSetter捕捉RoutedEvents和。MouseEnterMouseLeave

于 2015-09-02T06:21:44.130 回答