WPF 如果视图模型中的布尔值为 true,则跳过动画以结束

本文关键字:动画 结束 true 视图 如果 模型 布尔值 WPF | 更新日期: 2023-09-27 18:30:58

我的 WPF 应用程序中有一个带有动画的屏幕。我需要每个用户会话仅运行一次动画。这意味着,如果用户第一次看到带有动画的屏幕,它将播放,但是当用户返回该屏幕时,它将处于最终状态(跳到结束)。

我的 ViewModel 中有一个布尔值,它包含所有用户/会话逻辑,它指示天气是否应该运行动画,或者应该在最后一帧显示。

如何仅使用 XAML 实现这种类型的绑定/功能?

WPF 如果视图模型中的布尔值为 true,则跳过动画以结束

您可能想查看 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 属性时才有效。