WPF故事板动画

时间:2017-09-12 23:38:15

标签: c# wpf

总体目标是让窗口在1秒内淡入0%至80%,在3秒内保持80%,然后在1.5秒内淡出80%至0%。捕获的是,如果用户将鼠标悬停在窗口上,则只要鼠标在窗口上方,它就会达到100%并保持在那里。一旦鼠标离开窗口,它应立即降至80%并开始淡出1.5秒。

到目前为止,我已经:

    <Style.Triggers>
        <EventTrigger RoutedEvent="Window.Loaded">
            <BeginStoryboard>
                <Storyboard>
                    <DoubleAnimation Duration="00:00:01" Storyboard.TargetProperty="Opacity" From="0.0" To="0.8" />
                    <DoubleAnimation BeginTime="00:00:04" Duration="00:00:01.5" Storyboard.TargetProperty="Opacity" From="0.8" To="0.0" />
                </Storyboard>
            </BeginStoryboard>
        </EventTrigger>
    </Style.Triggers>

不确定将鼠标放在哪里。我是否需要将淡出动画移动到其他事件?如果用户在窗口淡出(例如70%)时将鼠标悬停在窗口上,则应立即转为100%。当鼠标离开时,它应该达到80%,然后在几秒钟后开始淡出。如果我按原样暂停或停止动画,它将如何知道从哪里开始?

2 个答案:

答案 0 :(得分:1)

这是一个。根据您的需要进行修改

 <Style TargetType="{x:Type Window}">
        <Style.Triggers>
            <EventTrigger RoutedEvent="Window.Loaded">
                <BeginStoryboard Name="FadeOutBoard">
                    <Storyboard>
                        <DoubleAnimation Duration="00:00:01" Storyboard.TargetProperty="Opacity" From="0.0" To="0.8" />
                        <DoubleAnimation BeginTime="00:00:04" Duration="00:00:01.5" Storyboard.TargetProperty="Opacity" From="0.8" To="0.0" />
                    </Storyboard>
                </BeginStoryboard>
            </EventTrigger>
            <EventTrigger RoutedEvent="Window.MouseMove">
                <StopStoryboard BeginStoryboardName="FadeOutBoard" />
            </EventTrigger>
            <EventTrigger RoutedEvent="Window.MouseLeave">
                <SeekStoryboard BeginStoryboardName="FadeOutBoard" />
            </EventTrigger>
        </Style.Triggers>
    </Style>

答案 1 :(得分:-2)

为故事板提供名称,并为其访问共享成员变量。当用户进入窗口时,请呼叫成员Stop以暂停故事板。如果需要,将可见性设置为100%,直到获得鼠标退出通知。在退出时调用一个不同的故事板,它执行您在上面描述的业务逻辑。