2012-03-01 48 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; 
} 

,您可以爲使用如下:

Reverse(this.Resources["Storyboard1"] as Storyboard); 
+0

我對這個解決方案的一些疑慮,因爲你需要重新定位/反轉關鍵幀也是如此。 – 2012-03-01 06:28:20

+0

@ColinE:你能不能更具體些,看到我發佈的代碼假設我想讓「imageBack1」變成「image1」,反之亦然。 – user1235555 2012-03-01 06:41:15

+0

@Emo好點。然而,我的回答中重要的一點是我的「在框架中不支持這一點」的說法。你必須自己編輯StoryBoard。 – ColinE 2012-03-01 08:24:50

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值,新的腳本不能找到正確的元素。

不幸的是我不知道的故事板級人物了它是如何在XAML樹中的位置做/它的資源父:/