添加时间轴后,情节提要动画无法在WPF中暂停。DesiredFrameRate

时间:2018-07-08 19:13:57

标签: c# wpf .net-4.0

我有一个Storyboard,我想每10个seoconds更改一次Tag元素:

  <Storyboard x:Key="sbSmallAd" Duration="0:0:20" RepeatBehavior="Forever">
        <StringAnimationUsingKeyFrames Storyboard.TargetProperty="Tag">
            <DiscreteStringKeyFrame Value="1" KeyTime="0:0:0" />
            <DiscreteStringKeyFrame Value="2" KeyTime="0:0:10" />
        </StringAnimationUsingKeyFrames>
    </Storyboard>

我想在我的Image中使用它:

 <Grid x:Name="grdAd" PreviewMouseDown="Grid_Ad_PreviewMouseDown" Background="Transparent" Visibility="Collapsed">
       <Image x:Name="imgAd"  PreviewMouseDown="Grid_Ad_PreviewMouseDown"/>
 </Grid>

然后我在后面的代码中生成动画:

// Start the code
private Storyboard adStoryboard = null;
public void Start()
{
  grdAd.Visibility = Visibility.Visible;
  if (null == adStoryboard)
  {
      adStoryboard = (Storyboard)this.FindResource("sbSmallAd");
      // Some people said we must set second parameter isControllable set to 
      // true for pause it, I did but not working
      adStoryboard.Begin(imgAd, true);
  }
  else
  {
      adStoryboard.Resume(imgAd);
  }
}

当我单击动画Pause时,我还想要它:

private void Grid_Ad_PreviewMouseDown(object sender, MouseButtonEventArgs e)
{
   grdAd.Visibility = Visibility.Collapsed;
   adStoryboard.Pause(imgAd);
}

但是问题是,即使我已经Pause动画了,Tag元素仍然会不断变化,为此我花了太多时间,但我听不懂。有谁知道这是怎么回事吗?谢谢。

我正在使用:.Net4Visual Studio 2017

更新1:

有些朋友告诉我they can't reappear this problem,因为我的项目太大,无法显示所有代码,例如,我创建了一个新项目。 Then I can't reappear the problem too..... 我最终发现我真的错过了1行代码:

adStoryboard.SetValue(Storyboard.DesiredFrameRateProperty, 1);

或者,将其放入XAML:

<Storyboard x:Key="sbSmallAd" Timeline.DesiredFrameRate="1" Duration="0:0:20" RepeatBehavior="Forever">
    <StringAnimationUsingKeyFrames Storyboard.TargetProperty="Tag">
          <DiscreteStringKeyFrame Value="1" KeyTime="0:0:0" />
          <DiscreteStringKeyFrame Value="2" KeyTime="0:0:10" />
    </StringAnimationUsingKeyFrames>
</Storyboard>

我也找到了解决方案,只需将Duration中的RepeatBehaviorStoryboard放入StringAnimationUsingKeyFrames

<Storyboard x:Key="sbSmallAd" Timeline.DesiredFrameRate="1">
    <StringAnimationUsingKeyFrames Storyboard.TargetProperty="Tag" Duration="0:0:20" RepeatBehavior="Forever">
          <DiscreteStringKeyFrame Value="1" KeyTime="0:0:0" />
          <DiscreteStringKeyFrame Value="2" KeyTime="0:0:10" />
    </StringAnimationUsingKeyFrames>
</Storyboard>

但是,此解决方案将导致另一个问题:如果在Value更改为2之后,我等待5秒钟,然后Pause,然后等待10秒第二,ResumeValue更改为1,而不是我期望的那样:仍显示2表示另外5个秒。

我没有关闭此问题,因为我仍然想知道为什么Timeline.DesiredFrameRate="1" 造成这个问题。我也想知道为什么我的解决方案不像我所期望的那样Resume真实。

当我第一次写问题时,我向所有想念problem代码的人致以诚挚的歉意。另外,我从以下位置更改问题标题

  

故事板动画无法在WPF中暂停

收件人:

  

添加后,Storyboard动画无法在WPF中暂停   Timeline.DesiredFrameRate

这仅是为了帮助其他人发现这种问题,我希望一些较早加入此问题的朋友能够理解。

0 个答案:

没有答案