2

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

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

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

4

2 回答 2

1

一个简单的解决方案是将您的 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 属性才有效。

于 2013-09-11T10:02:01.150 回答
1

您可能想查看 MSDN 上的SkipStoryboardToFill 类页面以获得答案。链接页面上有一个很好的示例,它完全解释了如何操作Storyboard对象。从链接的例子:

<EventTrigger RoutedEvent="Button.Click" SourceName="SkipToFillButton">
    <SkipStoryboardToFill BeginStoryboardName="MyBeginStoryboard" />
</EventTrigger>
于 2013-09-11T10:20:44.227 回答