首页 > 解决方案 > 如果少于 1 秒,WPF 表单不透明度淡入淡出动画未完成

问题描述

我有一个表单,我希望将其淡化为 70% 的不透明度,除非鼠标悬停在表单上,​​我的代码只有在我将动画时间设置为 1 秒时才能正常工作。低于此值的动画似乎在恢复到 100% 不透明度之前停止。

<Window.Resources>
    <Style TargetType="local:MainWindow">
        <Style.Triggers>
            <Trigger Property="IsMouseOver" Value="True">
                <Trigger.EnterActions>
                    <BeginStoryboard>
                        <Storyboard
                                Storyboard.TargetProperty="(Window.Opacity)"
                                Duration="0:0:0.3">
                            <DoubleAnimation To="1" />
                        </Storyboard>
                    </BeginStoryboard>
                </Trigger.EnterActions>
                <Trigger.ExitActions>
                    <BeginStoryboard>
                        <Storyboard
                                Storyboard.TargetProperty="(Window.Opacity)"
                                Duration="0:0:0.3">
                            <DoubleAnimation To=".70" />
                        </Storyboard>
                    </BeginStoryboard>
                </Trigger.ExitActions>
            </Trigger>
        </Style.Triggers>
    </Style>
</Window.Resources>

标签: c#wpfanimationstyles

解决方案


Storyboard.TargetProperty并且Duration必须在动画上设置,而不是在情节提要上。

如果您在情节提要上设置持续时间,则动画会运行其默认的 1 秒持续时间。

<Trigger Property="IsMouseOver" Value="True">
    <Trigger.EnterActions>
        <BeginStoryboard>
            <Storyboard>
                <DoubleAnimation
                    Storyboard.TargetProperty="Opacity"
                    To="1" Duration="0:0:0.3"/>
            </Storyboard>
        </BeginStoryboard>
    </Trigger.EnterActions>
    <Trigger.ExitActions>
        <BeginStoryboard>
            <Storyboard>
                <DoubleAnimation
                    Storyboard.TargetProperty="Opacity"
                    To=".7" Duration="0:0:0.3" />
            </Storyboard>
        </BeginStoryboard>
    </Trigger.ExitActions>
</Trigger>

推荐阅读