2012-03-01 4 views
0

특정 조건에서 뒤로 재생하고 싶은 스토리 보드 애니메이션이 있습니다.스토리 보드 애니메이션을 거꾸로 호출하는 방법은 무엇입니까?

storyboard1.autoreverse = true;

내가 필드

프레임 워크에서이를 지원하지 않습니다
<Storyboard x:Name="Storyboard1" Completed="Storyboard1_Completed"> 
     <DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.Projection).(PlaneProjection.RotationY)" Storyboard.TargetName="imageBack1"> 
      <EasingDoubleKeyFrame KeyTime="0:0:0.25" Value="90"/> 
      <EasingDoubleKeyFrame KeyTime="0:0:0.5" Value="0"/> 
     </DoubleAnimationUsingKeyFrames> 
     <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.Visibility)" Storyboard.TargetName="imageBack1"> 
      <DiscreteObjectKeyFrame KeyTime="0:0:0.25"> 
       <DiscreteObjectKeyFrame.Value> 
        <Visibility>Visible</Visibility> 
       </DiscreteObjectKeyFrame.Value> 
      </DiscreteObjectKeyFrame> 
     </ObjectAnimationUsingKeyFrames> 
     <DoubleAnimation Duration="0:0:0.25" To="90" Storyboard.TargetProperty="(UIElement.Projection).(PlaneProjection.RotationY)" Storyboard.TargetName="image1" d:IsOptimized="True"/> 
    </Storyboard> 

답변

0

에서 &로 변경하려는처럼 내가

그 원하는 것이 아니다, 그러나, 자신을 쉽게 할 수 있습니다 : 당신이로 사용할 수

private void Reverse(Storyboard sb) 
{ 
    DoubleAnimation anim = sb.Children.OfType<DoubleAnimation>().Single(); 
    object temp = anim.From; 
    anim.From = anim.To; 
    anim.To = Temp; 
} 

은 다음과 같습니다

+0

당신은/재배치뿐만 아니라 키 프레임을 반전 할 필요가 있기 때문에이 솔루션에 대한 몇 가지 의문이 있습니다

불행하게도 나는 그것을 밖으로 스토리 보드 수준의 그림은 XAML 트리에 위치 방법을 몰라 /이 자료의 부모. –

+0

@ColinE : 좀 더 구체적으로, 내가 게시 한 코드를보고 "image1"을 "image1"로 만들고 그 반대의 경우도 가능합니까? – user1235555

+0

@Emo 좋은 지적. 그러나 "프레임 워크에이 문제에 대한 지원이 없다"는 제 대답은 중요한 답변입니다. 스토리 보드를 편집하여 직접해야합니다. – ColinE

0

나는 수동으로 스토리 보드를 반전했습니다 :

// does not work. 
    public static Storyboard Reverse(Storyboard storyboard) 
    { 
     Storyboard newStoryboard = new Storyboard(); 
     newStoryboard.SpeedRatio = storyboard.SpeedRatio; 
     foreach (var unknownChild in storyboard.Children) 
     { 
      if (unknownChild is DoubleAnimation) 
      { 
       DoubleAnimation child = unknownChild as DoubleAnimation; 
       DoubleAnimation newChild = new DoubleAnimation() 
       { 
        Duration = child.Duration, 
        // AutoReverse, BeginTime, FillBehaviour, RepeatBehaviour, SpeedRatio? 
        From = child.To, 
        To = child.From, 
        EasingFunction = child.EasingFunction 
       }; 
       Storyboard.SetTargetProperty(newChild, Storyboard.GetTargetProperty(child)); 
       Storyboard.SetTargetName(newChild, Storyboard.GetTargetName(child)); 
       newStoryboard.Children.Add(newChild); 
      } 
      else if (unknownChild is ObjectAnimationUsingKeyFrames) 
      { 
       ObjectAnimationUsingKeyFrames child = unknownChild as ObjectAnimationUsingKeyFrames; 
       var newChild = new ObjectAnimationUsingKeyFrames() 
       { 
        Duration = (child as Timeline).Duration, 
       }; 
       foreach (ObjectKeyFrame keyFrame in child.KeyFrames) 
       { 
        var newKeyFrame = new DiscreteObjectKeyFrame() { 
         KeyTime = KeyTime.FromTimeSpan(child.Duration.TimeSpan - keyFrame.KeyTime.TimeSpan), 
         Value = keyFrame.Value 
        }; 
        newChild.KeyFrames.Add(newKeyFrame); 
       } 
       Storyboard.SetTargetName(newChild, Storyboard.GetTargetName(child)); 
       Storyboard.SetTargetProperty(newChild, Storyboard.GetTargetProperty(child)); 
       newStoryboard.Children.Add(newChild); 
      } 
      else 
      { 
       throw new Exception("type " + unknownChild + " not supported"); 
      } 
     } 
     return newStoryboard; 
    } 

그러나 가장 큰 문제는 내가 targetName을하고 TargetProperty 값을 전송하더라도, 새로운 스토리 보드가 올바른 요소를 찾을 수없는 것 같다./

관련 문제