XAML(Metro app) - 如何将FadeInThemeAnimation延迟一秒

时间:2012-08-14 10:21:57

标签: c# xaml windows-runtime winrt-xaml

我的XAML中包含一个包含ProgressRing的Grid,当应用程序执行长时间运行的任务时,它会逐渐消失:

                                                                                                                                       

        <Grid Height="100" Width="100"  >
            <Grid Background="#55000000" />
            <ProgressRing x:Name="mapProgressRing"  Width="50" Height="50" Foreground="White" />    
        </Grid>
        </Border>

但是,我希望将动画延迟1秒,这个想法是如果任务在不到一秒的时间内完成,则网格永远不会显示。因此,当执行非常短的任务时,避免网格不断地闪烁。

然而,尽管在上面的XAML中设置了BeginTime,但网格总是会立即开始逐渐淡入视图,即使我在代码中尝试此操作也是如此。这是我的代码:

    void dataSou_WillStartFetchingSomething(object sender, EventArgs e)
    {
        // Don't bother fading in spinner unless it takes more than a second
        showSpinner(TimeSpan.FromSeconds(1));
    }
    void Instance_WillEndFetchingSomething(object sender, EventArgs e)
    {
        hideSpinner();
    }

    #region Spinner
    void showSpinner(TimeSpan? delayStartTime)
    {
        // Stop animation in case it's already running
        mapRingFadeOutStoryBoard.Stop();
        // Fade in, delaying the start by the specified time
        mapRingFadeInStoryBoard.BeginTime = delayStartTime;
        mapRingFadeInStoryBoard.Begin();
    }
    void hideSpinner()
    {
        // Stop the 'fade in' animation in case it's still running
        mapRingFadeInStoryBoard.Stop();

        // Fade out
        mapRingFadeOutStoryBoard.Begin();
    }
    #endregion

我做错了什么?

1 个答案:

答案 0 :(得分:0)

不确定是什么问题,但您可以使用async / await代替。只需将您的方法标记为异步,然后在开始动画之前执行“等待Task.Delay(1000)”等待一秒钟。