Установите TargetName динамически и DoubleAnimationUsingKeyFrames в XAML - PullRequest
0 голосов
/ 28 марта 2011

я хочу знать, как динамически изменять целевое имя с такой же анимацией

. Ниже приведен мой код 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?

С уважением, Дипаншу

Ответы [ 2 ]

1 голос
/ 04 мая 2011
Storyboard sb = (Storyboard)FindResource("deepanshu");
foreach (var animation in sb.Children)
{
    Storyboard.SetTargetName(animation, "image2");
}
0 голосов
/ 17 августа 2016

То, что сказал HB, работает отлично.В 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 # Я написал пользовательскую функцию для вызова Animation.

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");
...