【问题标题】:Set TargetName dynamically and DoubleAnimationUsingKeyFrames in XAML在 XAML 中动态设置 TargetName 和 DoubleAnimationUsingKeyFrames
【发布时间】:2016-08-17 21:44:34
【问题描述】:

我想知道如何使用相同的动画动态更改目标名称

请在下面找到我的 WPF 代码,用于 xaml 和 c# 代码

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?

谢谢 问候, 深盘树

【问题讨论】:

    标签: wpf dynamic storyboard target


    【解决方案1】:
    Storyboard sb = (Storyboard)FindResource("deepanshu");
    foreach (var animation in sb.Children)
    {
        Storyboard.SetTargetName(animation, "image2");
    }
    

    【讨论】:

      【解决方案2】:

      什么 H.B.说工作得很好。在 XAML 中放置故事板而不像这样指定 TargetName

      <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>
      

      对于 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");
      

      【讨论】:

        猜你喜欢
        • 2021-04-23
        • 1970-01-01
        • 1970-01-01
        • 2015-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-06-12
        • 2011-06-06
        • 2015-06-17
        相关资源
        最近更新 更多