Как установить Storyboard.SetTargetProperty в коде позади? - PullRequest
1 голос
/ 15 марта 2012

Я пытаюсь преобразовать раскадровку XAML в код за раскадровкой.Но я получаю исключение

Cannot resolve all property references in the property path
  '(UIElement.RenderTransform).(myTransformGroup.Children)[1].(TranslateTransform.Y)'.
  Verify that applicable objects support the properties.  

Я искал несколько сайтов, но они также делают это одинаково.Я не понимаю, где я иду не так.

XAML:

<Storyboard x:Key="Storyboard1">
        <DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.RenderTransform).(TransformGroup.Children)[0].(ScaleTransform.ScaleX)" Storyboard.TargetName="r1">
            <EasingDoubleKeyFrame KeyTime="0" Value="1"/>
            <EasingDoubleKeyFrame KeyTime="0:0:0.4" Value="0.828"/>
            <EasingDoubleKeyFrame KeyTime="0:0:1" Value="0.828"/>
        </DoubleAnimationUsingKeyFrames>

        <DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.RenderTransform).(TransformGroup.Children)[3].(TranslateTransform.Y)" Storyboard.TargetName="r1">
            <EasingDoubleKeyFrame KeyTime="0" Value="0"/>
            <EasingDoubleKeyFrame KeyTime="0:0:0.4" Value="8.621"/>
            <EasingDoubleKeyFrame KeyTime="0:0:1" Value="8.621"/>
        </DoubleAnimationUsingKeyFrames>
    </Storyboard>

C # Код:

  public void myAnimation(Rectangle myRectangle)
    {
        this.UnregisterName(myRectangle.Name);
        ScaleTransform myScaleTransform = new ScaleTransform();
        TranslateTransform myTranslateTransform = new TranslateTransform();
        TransformGroup myTransformGroup = new TransformGroup();
        myTransformGroup.Children.Add(myScaleTransform);
        myTransformGroup.Children.Add(myTranslateTransform);
        myRectangle.RenderTransform = myTransformGroup;
        this.RegisterName(myRectangle.Name, myTransformGroup);

        DoubleAnimationUsingKeyFrames myDoubleAnimationUsingKeyFrames = new DoubleAnimationUsingKeyFrames();
        EasingDoubleKeyFrame myEasingDoubleKeyFrame = new EasingDoubleKeyFrame();
        Storyboard myStoryboard = new Storyboard();

        Storyboard.SetTargetName(myDoubleAnimationUsingKeyFrames, myRectangle.Name);
        Storyboard.SetTargetProperty(myDoubleAnimationUsingKeyFrames, new PropertyPath("(UIElement.RenderTransform).(TransformGroup.Children)[0].(ScaleTransform.ScaleX)"));

        myEasingDoubleKeyFrame.KeyTime = KeyTime.FromPercent(0);
        myEasingDoubleKeyFrame.Value = 1;
        myDoubleAnimationUsingKeyFrames.KeyFrames.Add(myEasingDoubleKeyFrame);

        myEasingDoubleKeyFrame.KeyTime = KeyTime.FromPercent(0.4);
        myEasingDoubleKeyFrame.Value = 0.828;
        myDoubleAnimationUsingKeyFrames.KeyFrames.Add(myEasingDoubleKeyFrame);

        myEasingDoubleKeyFrame.KeyTime = KeyTime.FromPercent(1);
        myEasingDoubleKeyFrame.Value = 0.828;
        myDoubleAnimationUsingKeyFrames.KeyFrames.Add(myEasingDoubleKeyFrame);

        myStoryboard.Children.Add(myDoubleAnimationUsingKeyFrames);

        Storyboard.SetTargetName(myDoubleAnimationUsingKeyFrames, myRectangle.Name);
        Storyboard.SetTargetProperty(myDoubleAnimationUsingKeyFrames, new PropertyPath("(UIElement.RenderTransform).(TransformGroup.Children)[1].(TranslateTransform.X)"));

        myEasingDoubleKeyFrame.KeyTime = KeyTime.FromPercent(0);
        myEasingDoubleKeyFrame.Value = 0;
        myDoubleAnimationUsingKeyFrames.KeyFrames.Add(myEasingDoubleKeyFrame);

        myEasingDoubleKeyFrame.KeyTime = KeyTime.FromPercent(0.4);
        myEasingDoubleKeyFrame.Value = -17.5;
        myDoubleAnimationUsingKeyFrames.KeyFrames.Add(myEasingDoubleKeyFrame);

        myEasingDoubleKeyFrame.KeyTime = KeyTime.FromPercent(1);
        myEasingDoubleKeyFrame.Value = 165.5;
        myDoubleAnimationUsingKeyFrames.KeyFrames.Add(myEasingDoubleKeyFrame);

        myStoryboard.Children.Add(myDoubleAnimationUsingKeyFrames);

        myStoryboard.Begin(myRectangle);

    }

Я думаю, проблема в Storyboard.SetTargetProperty

Ответы [ 2 ]

4 голосов
/ 17 марта 2012

Я решаю свою проблему с помощью этой строки.

new PropertyPath("RenderTransform.Children[0].ScaleY")

спасибо всем.

0 голосов
/ 16 марта 2012

Попробуйте PropertyPath вот так:

new PropertyPath("(0).(1)[0].(2)", UIElement.RenderTransformProperty, TransformGroup.ChildrenProperty, ScaleTransform.ScaleXProperty)

Дополнительная литература .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...