我有一个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
元素仍然会不断变化,为此我花了太多时间,但我听不懂。有谁知道这是怎么回事吗?谢谢。
我正在使用:.Net4
和Visual 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
中的RepeatBehavior
和Storyboard
放入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秒第二,Resume
,Value
更改为1
,而不是我期望的那样:仍显示2
表示另外5
个秒。
我没有关闭此问题,因为我仍然想知道为什么Timeline.DesiredFrameRate="1"
造成这个问题。我也想知道为什么我的解决方案不像我所期望的那样Resume
真实。
当我第一次写问题时,我向所有想念problem
代码的人致以诚挚的歉意。另外,我从以下位置更改问题标题:
故事板动画无法在WPF中暂停
收件人:
添加后,Storyboard动画无法在WPF中暂停 Timeline.DesiredFrameRate
这仅是为了帮助其他人发现这种问题,我希望一些较早加入此问题的朋友能够理解。