如何同时为两个轴(X,Y)进行平移动画?

时间:2012-03-15 14:44:47

标签: windows-phone-7 animation windows-phone-7.1

我在Storyboard方法中做了类似的事情,但无法达到预期的效果。这个动画我想在页面加载后播放。

    private void PhoneApplicationPage_Loaded(object sender, RoutedEventArgs e)
    {
        CreateTranslateAnimation(image1);
    }


        private void CreateTranslateAnimation(UIElement source)
        {
            Storyboard sb = new Storyboard();

            DoubleAnimationUsingKeyFrames animationFirstX = new DoubleAnimationUsingKeyFrames();
            source.RenderTransform = new CompositeTransform();
            Storyboard.SetTargetProperty(animationFirstX, new PropertyPath(CompositeTransform.TranslateXProperty));
            Storyboard.SetTarget(animationFirstX, source.RenderTransform);
            animationFirstX.KeyFrames.Add(new EasingDoubleKeyFrame() { KeyTime = kt1, Value = 20 });

            DoubleAnimationUsingKeyFrames animationFirstY = new DoubleAnimationUsingKeyFrames();
            source.RenderTransform = new CompositeTransform();
            Storyboard.SetTargetProperty(animationFirstY, new PropertyPath(CompositeTransform.TranslateYProperty));
            Storyboard.SetTarget(animationFirstY, source.RenderTransform);
            animationFirstY.KeyFrames.Add(new EasingDoubleKeyFrame() { KeyTime = kt1, Value = 30 });

    sb.Children.Add(animationFirstX);
            sb.Children.Add(animationFirstY);
            sb.Begin();             
         }

缩短它......

我想编写与此代码相当的.cs代码

    <Storyboard x:Name="Storyboard1">
        <DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.RenderTransform).(CompositeTransform.TranslateX)" Storyboard.TargetName="image1">
            <EasingDoubleKeyFrame KeyTime="0:0:0.5" Value="20"/>
        </DoubleAnimationUsingKeyFrames>
        <DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.RenderTransform).(CompositeTransform.TranslateY)" Storyboard.TargetName="image1">
            <EasingDoubleKeyFrame KeyTime="0:0:0.5" Value="30"/>
        </DoubleAnimationUsingKeyFrames>
        </Storyboard>

1 个答案:

答案 0 :(得分:2)

您要将source.RenderTransform设置两次。第一个变换动画引用了一个CompositeTransform对象,该对象在动画运行时已从UIElement中删除

摆脱第二个source.RenderTransform = new CompositeTransform();,你应该会得到更好的结果。

“剪切和粘贴是源码,是编码邪恶的源头”:)