c# - 如何重新启动 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>
解决方案
推荐阅读
- bucklescript - 如何使用本地包中的原因模块
- ruby-on-rails - ActiveModel::ForbiddenAttributesError in UserStepsController#update
- c - 在脚本路径前加上 `/usr/bin/env -i` 会使 system() 和 popen() 的使用安全吗?
- powerbi - DAX 无法使用“不等于”比较计算 FILTER
- java - Heroku 构建和部署 Jersey 应用程序找不到符号
- python - Python制作附加文件夹
- r - ec2 上的 sparklyr:无法访问 spark web 界面 (4040)
- html - 触摸页面顶部或底部时,滚动仅卡在 HiDpi 屏幕上
- android - 将动态添加的按钮放在彼此下方
- c# - 如何使用 ef core 在 sql 中创建一个在整个系统中唯一的字符串?