我的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
我做错了什么?
答案 0 :(得分:0)
不确定是什么问题,但您可以使用async / await代替。只需将您的方法标记为异步,然后在开始动画之前执行“等待Task.Delay(1000)”等待一秒钟。