我的 WPF 应用程序中有一个带有动画的屏幕。我需要动画在每个用户会话中只运行一次。这意味着如果用户第一次看到带有动画的屏幕,它会播放,但是当用户回到它时,它将处于最终状态(跳到结束)。
我的 ViewModel 中有一个布尔值,它包含所有用户/会话逻辑,它指示天气是否应该运行动画,或者它应该在最后一帧显示。
如何仅使用 XAML 实现这种类型的绑定/功能?
我的 WPF 应用程序中有一个带有动画的屏幕。我需要动画在每个用户会话中只运行一次。这意味着如果用户第一次看到带有动画的屏幕,它会播放,但是当用户回到它时,它将处于最终状态(跳到结束)。
我的 ViewModel 中有一个布尔值,它包含所有用户/会话逻辑,它指示天气是否应该运行动画,或者它应该在最后一帧显示。
如何仅使用 XAML 实现这种类型的绑定/功能?
一个简单的解决方案是将您的 bool Prop 绑定到 Binding 的 Duration 属性。
现在您需要一个将 bool 转换为 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);
}
编辑:SkipStoryboardToFill
在 Sheridan 的回答中提到,您可以执行以下操作:
<DataTrigger Binding="{Binding Path=EnableStoryboard}" Value="False">
<DataTrigger.EnterActions>
<SkipStoryboardToFill BeginStoryboardName="BeginStoryboard"></SkipStoryboardToFill>
</DataTrigger.EnterActions>
</DataTrigger>
但这只有在 BeginStoryboard 运行时更改 bool 属性才有效。
您可能想查看 MSDN 上的SkipStoryboardToFill 类页面以获得答案。链接页面上有一个很好的示例,它完全解释了如何操作Storyboard
对象。从链接的例子:
<EventTrigger RoutedEvent="Button.Click" SourceName="SkipToFillButton">
<SkipStoryboardToFill BeginStoryboardName="MyBeginStoryboard" />
</EventTrigger>