0

我有一个动画,它将网格移动到特定位置,然后使用 AutoReverse 自动返回。但由于它是即时的,用户无法阅读其中的消息。如何在动画中放置 - 例如 - 5 秒延迟

这是我到目前为止的方法

public void ErrorMessage(Grid grid, ImageSource imageSource, String error_message)
    {
        Image_Broken_Component.Source = imageSource;
        TextBlock_Error_Message.Text = error_message;

        ThicknessAnimation ta = new ThicknessAnimation
        {
            From = grid.Margin,
            To = new Thickness(0, 50, 0, 0),
            Duration = new Duration(TimeSpan.FromSeconds(1)),
            AutoReverse = true
        };
        grid.BeginAnimation(Grid.MarginProperty, ta);
    }

动画应该像这样播放(使用 From 和 To-values): 1 -> 0 -> wait 5s -> 1

4

1 回答 1

0

不要使用该AutoReverse属性,而是使用Storyboard

https://docs.microsoft.com/en-us/dotnet/framework/wpf/graphics-multimedia/storyboards-overview

BeginTime属性可用于延迟第二个动画以进行基本排序,如下所示:

XAML C# WPF 执行有序动画序列的最佳有效方法

然后你可以只对两个序列ThicknessAnimations(一个正向,一个反向)并设置BeginTime第二个的序列,以便在动画反转之前有一个暂停。

示例代码:

public void ErrorMessage(Grid grid, ImageSource imageSource, String error_message)
{
    Image_Broken_Component.Source = imageSource;
    TextBlock_Error_Message.Text = error_message;

    var storyboard = new Storyboard();

    storyboard.Children.Add(new ThicknessAnimation
    {
        From = grid.Margin,
        To = new Thickness(0, 50, 0, 0),
        Duration = new Duration(TimeSpan.FromSeconds(1))
    });

    storyboard.Children.Add(new ThicknessAnimation
    {
        From = new Thickness(0, 50, 0, 0),
        To = grid.Margin,
        Duration = new Duration(TimeSpan.FromSeconds(1)),
        BeginTime = TimeSpan.FromSeconds(6)
    });

    grid.BeginStoryboard(Grid.MarginProperty, storyboard);
}
于 2020-03-23T13:28:55.657 回答