首页 > 解决方案 > 如何重新启动 WPF 动画/故事板?

问题描述

我有一个热键,它会在 UI 上闪烁提示文本,然后消失。但问题是,我的故事板在其生命周期中只闪烁一次,这也意味着它会触发 Completed 事件一次。

当我按下热键时,保存 TextBlock 的网格变得可见,但动画不再播放并且完成的不再触发。

我需要这些工作,以便每次网格变得可见时,动画从头开始重新启动,然后触发完成的事件,这会将网格的可见性设置为 false。

这是代码:

<Grid Visibility="{Binding InfoTextVisible, ElementName=MyMainWindow}">

    <Grid.Triggers>
        <EventTrigger RoutedEvent="Grid.Loaded">
            <BeginStoryboard>
                    <Storyboard Completed="InfoTextAnimation_Completed" FillBehavior="Stop">
                        <DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="Opacity" Duration="0:0:1" Completed="DoubleAnimationUsingKeyFrames_Completed">
                            <SplineDoubleKeyFrame  KeyTime="0:0:00.00" Value="0"/>
                            <SplineDoubleKeyFrame  KeyTime="0:0:01.00" Value="1"/>
                            <SplineDoubleKeyFrame  KeyTime="0:0:01.50" Value="0"/>
                        </DoubleAnimationUsingKeyFrames>
                    </Storyboard>
            </BeginStoryboard>
        </EventTrigger>
    </Grid.Triggers>

    <TextBlock Text="{Binding InfoText, ElementName=MyMainWindow}" Name="timoti" Foreground="White" FontSize="50" FontWeight="Bold" HorizontalAlignment="Center" VerticalAlignment="Center"/>

</Grid>

新代码:

<Grid Visibility="{Binding InfoTextVisible, ElementName=MyMainWindow}">

    <Grid.Style>
        <Style TargetType="Grid">
            <Style.Triggers>
                <Trigger Property="Visibility" Value="Visible">
                    <Trigger.EnterActions>
                        <BeginStoryboard x:Name="SpinStoryboard">

                            <Storyboard>
                                <DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="Opacity" Duration="0:0:1">
                                    <SplineDoubleKeyFrame  KeyTime="0:0:00.00" Value="0"/>
                                    <SplineDoubleKeyFrame  KeyTime="0:0:01.00" Value="1"/>
                                    <SplineDoubleKeyFrame  KeyTime="0:0:01.50" Value="0"/>
                                </DoubleAnimationUsingKeyFrames>
                                <ObjectAnimationUsingKeyFrames  Storyboard.TargetProperty="Visibility">
                                    <DiscreteObjectKeyFrame  KeyTime="0:0:02.00" Value="{x:Static Visibility.Hidden}"/>
                                </ObjectAnimationUsingKeyFrames>
                            </Storyboard>

                        </BeginStoryboard>
                            
                    </Trigger.EnterActions>
                    <Trigger.ExitActions>
                        <StopStoryboard BeginStoryboardName="SpinStoryboard"></StopStoryboard>
                    </Trigger.ExitActions>
                </Trigger>
            </Style.Triggers>
        </Style>
    </Grid.Style>

    <TextBlock Text="{Binding InfoText, ElementName=MyMainWindow}" Name="timoti" Foreground="White" FontSize="50" FontWeight="Bold" HorizontalAlignment="Center" VerticalAlignment="Center"/>

</Grid>

标签: c#.netwpfanimationstoryboard

解决方案


推荐阅读