如何重置启用页面缓存的故事板?

时间:2016-10-11 20:08:03

标签: c# xaml uwp

我正在使用故事板将Rectangle对象的opacity从1更改为0.使用以下代码隐藏,Storyboard完美运行:

StoryboardFadeHider.Begin();

我的页面正在使用NavigationCacheMode = NavigationCacheMode.Enabled;来缓存页面状态。动画在OnNavigatedTo中启动,但延迟BeginTime。当第一次加载页面时,这非常有效,因为不透明度为1并且淡化为0.从缓存加载页面时,不透明度为0,因为故事板已经运行。在这种情况下的结果是

  1. 不透明度为0
  2. 延迟
  3. 故事板启动并将不透明度设置为1
  4. 淡出为0.
  5. 在运行故事板之前使用FadeHider.Opacity = 1;将不透明度设置为1并不能以某种方式工作,我的猜测是缓存的故事板会覆盖它。

    这是故事板和矩形:

    <Page.Resources>
         <Storyboard x:Name="StoryboardFadeHider">
              <DoubleAnimation Storyboard.TargetName="FadeHider" BeginTime="0:0:1" Storyboard.TargetProperty="Opacity" From="1" To="0" Duration="0:0:0.5" />
         </Storyboard>
    </Page.Resources>
    ...
    <Rectangle Grid.Row="0" Name="FadeHider" Opacity="1" Stretch="Fill" Fill="Black" />
    

    如何在运行故事板之前每次加载页面时将不透明度设置为1?

1 个答案:

答案 0 :(得分:1)

当您导航到其他页面时,OnNavigatingFrom中的不透明度重置为1:

protected override void OnNavigatingFrom(NavigatingCancelEventArgs e)
{
  StoryboardFadeHider.Stop();
}

同样在OnNavigatedTo中,您可以再次启动故事板:

protected override void OnNavigatedTo(NavigationEventArgs e)
{
  StoryboardFadeHider.Begin();
}