2017-09-22 123 views
0

我已经为我的图像控制下面的故事板,但是,运行这段代码时,最后一个图像不会被显示:WPF动画不能正常工作

<Image Height="15" Width="137" RenderTransformOrigin="0.415,4.583" Canvas.Left="104" Canvas.Top="13"> 

    <Image.Style> 
     <Style> 
      <Style.Triggers> 
       <DataTrigger Binding="{Binding State, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" Value="Reconnect"> 
        <DataTrigger.EnterActions>     
         <BeginStoryboard Name="reconnectStoryBoardImageChange" > 
          <Storyboard> 
           <ObjectAnimationUsingKeyFrames 
              BeginTime="00:00:00" RepeatBehavior="Forever" 
              Storyboard.TargetProperty="(Image.Source)"> 
            <DiscreteObjectKeyFrame KeyTime="00:00:01"> 
             <DiscreteObjectKeyFrame.Value> 
              <BitmapImage UriSource="Images/State/Reconnect.png" /> 
             </DiscreteObjectKeyFrame.Value> 
            </DiscreteObjectKeyFrame> 
            <DiscreteObjectKeyFrame KeyTime="00:00:02"> 
             <DiscreteObjectKeyFrame.Value> 
              <BitmapImage UriSource="Images/State/Reconnect_2.png" /> 
             </DiscreteObjectKeyFrame.Value> 
            </DiscreteObjectKeyFrame> 
            <DiscreteObjectKeyFrame KeyTime="00:00:03"> 
             <DiscreteObjectKeyFrame.Value> 
              <BitmapImage UriSource="Images/State/Reconnect_3.png" /> 
             </DiscreteObjectKeyFrame.Value> 
            </DiscreteObjectKeyFrame> 
            <DiscreteObjectKeyFrame KeyTime="00:00:04"> 
             <DiscreteObjectKeyFrame.Value> 
              <BitmapImage UriSource="Images/State/Reconnect_4.png" /> 
             </DiscreteObjectKeyFrame.Value> 
            </DiscreteObjectKeyFrame> 
           </ObjectAnimationUsingKeyFrames> 
          </Storyboard> 
         </BeginStoryboard> 
        </DataTrigger.EnterActions> 
        <DataTrigger.ExitActions>      
         <StopStoryboard BeginStoryboardName="reconnectStoryBoardImageChange"/> 
        </DataTrigger.ExitActions> 
       </DataTrigger> 
      </Style.Triggers> 
     </Style> 
    </Image.Style> 
</Image> 

这是什么XAML做它在显示不同的图像不同的时间,但从不显示reconnect_4,直到_3然后回到第一个图像。

我做错了什么?

回答

0

你可以找到解释为什么它不按你期望的方式工作here

如果动画的持续时间是自动的或其持续时间等于最后一个关键帧的时间 ,则动画结束。否则,如果动画的持续时间大于最后一个关键帧 的关键时间,则动画将保留关键帧值,直到达到其持续时间的末尾 。

因此,您应该指定StoryboardDuration。我会这样做:

<Style.Triggers> 
    <DataTrigger Binding="{Binding State, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" Value="Reconnect"> 
     <DataTrigger.EnterActions> 
      <BeginStoryboard Name="reconnectStoryBoardImageChange" > 
       <Storyboard> 
        <ObjectAnimationUsingKeyFrames BeginTime="00:00:00" Duration="00:00:04" RepeatBehavior="Forever" Storyboard.TargetProperty="(Image.Source)"> 
         <DiscreteObjectKeyFrame KeyTime="00:00:00"> 
          <DiscreteObjectKeyFrame.Value> 
           <BitmapImage UriSource="Images/State/Reconnect.png" /> 
          </DiscreteObjectKeyFrame.Value> 
         </DiscreteObjectKeyFrame> 
         <DiscreteObjectKeyFrame KeyTime="00:00:01"> 
          <DiscreteObjectKeyFrame.Value> 
           <BitmapImage UriSource="Images/State/Reconnect_2.png" /> 
          </DiscreteObjectKeyFrame.Value> 
         </DiscreteObjectKeyFrame> 
         <DiscreteObjectKeyFrame KeyTime="00:00:02"> 
          <DiscreteObjectKeyFrame.Value> 
           <BitmapImage UriSource="Images/State/Reconnect_3.png" /> 
          </DiscreteObjectKeyFrame.Value> 
         </DiscreteObjectKeyFrame> 
         <DiscreteObjectKeyFrame KeyTime="00:00:03"> 
          <DiscreteObjectKeyFrame.Value> 
           <BitmapImage UriSource="Images/State/Reconnect_4.png" /> 
          </DiscreteObjectKeyFrame.Value> 
         </DiscreteObjectKeyFrame> 
        </ObjectAnimationUsingKeyFrames> 
       </Storyboard> 
      </BeginStoryboard> 
     </DataTrigger.EnterActions> 
     <DataTrigger.ExitActions> 
      <StopStoryboard BeginStoryboardName="reconnectStoryBoardImageChange"/> 
     </DataTrigger.ExitActions> 
    </DataTrigger> 
</Style.Triggers> 

我指定4秒作为Duration。第一张图像从00:00:00到00:00:01显示。第二张图像从00:00:01至00:00:02显示。第三张图像从00:00:02到00:00:03显示。第四张图像从00:00:03到00:00:04显示。然后它重新启动。

在你的情况下,最后一个关键帧持续0秒,因为你的故事板过早结束。