2011-03-28 29 views
0

我想知道如何使用同样的动画dynamicaly更改目标名称设置的TargetName动态和DoubleAnimationUsingKeyFrames在XAML

请看下面是我的XAML和C#代码WPF的代码

XAML代码

<Storyboard x:Key="deepanshu"> 
    <DoubleAnimationUsingKeyFrames x:Name="gupta" 
            Storyboard.TargetProperty="(UIElement.RenderTransform).(TransformGroup.Children)[0].(ScaleTransform.ScaleX)" 
            Storyboard.TargetName="image1"> 
     <EasingDoubleKeyFrame KeyTime="0:0:0.3" Value="0.641"/> 
     <EasingDoubleKeyFrame KeyTime="0:0:0.5" Value="1"/> 
    </DoubleAnimationUsingKeyFrames> 
    <DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.RenderTransform).(TransformGroup.Children)[0].(ScaleTransform.ScaleY)" 
            Storyboard.TargetName="image1"> 
     <EasingDoubleKeyFrame KeyTime="0:0:0.3" Value="0.689"/> 
     <EasingDoubleKeyFrame KeyTime="0:0:0.5" Value="1"/> 
    </DoubleAnimationUsingKeyFrames> 
    <DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.RenderTransform).(TransformGroup.Children)[3].(TranslateTransform.X)" 
            Storyboard.TargetName="image1"> 
     <EasingDoubleKeyFrame KeyTime="0:0:0.3" Value="-1"/> 
     <EasingDoubleKeyFrame KeyTime="0:0:0.5" Value="0"/> 
    </DoubleAnimationUsingKeyFrames> 
    <DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.RenderTransform).(TransformGroup.Children)[3].(TranslateTransform.Y)" 
            Storyboard.TargetName="image1"> 
     <EasingDoubleKeyFrame KeyTime="0:0:0.3" Value="0.5"/> 
     <EasingDoubleKeyFrame KeyTime="0:0:0.5" Value="0"/> 
    </DoubleAnimationUsingKeyFrames> 
</Storyboard> 

C#

Storyboard sb = (Storyboard)FindResource("deepanshu"); 

现在如何将storyboaname从image1更改为image2?

感谢 问候, Deepanshu

回答

1
Storyboard sb = (Storyboard)FindResource("deepanshu"); 
foreach (var animation in sb.Children) 
{ 
    Storyboard.SetTargetName(animation, "image2"); 
} 
0

什么H.B.说工作得很好。在XAML把故事板没有这样

<Storyboard x:Key="OpacityUpAnim"> 
     <DoubleAnimation Storyboard.TargetProperty="Opacity" From="0" To="1" Duration="0:0:1.3"> 
      <DoubleAnimation.EasingFunction> 
       <CubicEase EasingMode="EaseOut" /> 
      </DoubleAnimation.EasingFunction> 
     </DoubleAnimation> 
</Storyboard> 

指定的TargetName为C#我写了一个自定义函数来调用动画。

private void RunStoryBoardFromName(string animName, string targetName = null) 
    { 
     Storyboard storyBoard = (Storyboard)this.Resources[animName]; 
     if (targetName != null) 
     { 
      foreach (var anim in storyBoard.Children) 
      { 
       Storyboard.SetTargetName(anim, targetName); 
      } 
     } 
     storyBoard.Begin(); 
    } 

然后我把它叫做在C#一样

RunStoryBoardFromName("OpacityUpAnim", "PopupGrid");