WPF 如果视图模型中的布尔值为 true,则跳过动画以结束
本文关键字:动画 结束 true 视图 如果 模型 布尔值 WPF | 更新日期: 2023-09-27 18:30:58
我的 WPF 应用程序中有一个带有动画的屏幕。我需要每个用户会话仅运行一次动画。这意味着,如果用户第一次看到带有动画的屏幕,它将播放,但是当用户返回该屏幕时,它将处于最终状态(跳到结束)。
我的 ViewModel 中有一个布尔值,它包含所有用户/会话逻辑,它指示天气是否应该运行动画,或者应该在最后一帧显示。
如何仅使用 XAML 实现这种类型的绑定/功能?
您可能想查看 MSDN 上的 SkipStoryboardToFill 类页面以获取答案。链接页面上有一个很好的例子,它完全解释了如何操作Storyboard
对象。从链接的示例中:
<EventTrigger RoutedEvent="Button.Click" SourceName="SkipToFillButton">
<SkipStoryboardToFill BeginStoryboardName="MyBeginStoryboard" />
</EventTrigger>
一个简单的解决方案是将布尔 Prop 绑定到绑定的 Duration-属性。
现在你需要一个将布尔值转换为TimeSpan的转换器,如下所示:
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
bool showAnimation = (bool)value;
return (showAnimation ) ? new TimeSpan(0,0,5) : new TimeSpan(0,0,0);
}
编辑:在Sheridan的回答中提到了SkipStoryboardToFill
,你可以做这样的事情:
<DataTrigger Binding="{Binding Path=EnableStoryboard}" Value="False">
<DataTrigger.EnterActions>
<SkipStoryboardToFill BeginStoryboardName="BeginStoryboard"></SkipStoryboardToFill>
</DataTrigger.EnterActions>
</DataTrigger>
但是,这仅在 BeginStoryboard 运行时更改 bool 属性时才有效。