双动画强制翻译

时间:2014-07-02 16:29:45

标签: c# xaml animation

我正在尝试在Windows Phone 8中的网格上实现翻译动画。

我想要实现的行为是,当用户从左向右拖动时,左侧(动画中)会出现一个新面板,当用户从右向左拖动时会发生反向。

为此,我实现了以下代码,该代码在Manipulation_Completed:

上调用
public Storyboard AnimateContent(int direction)
    {
        DoubleAnimation animation = new DoubleAnimation();

        if (direction == 1)
        {   //content_trans is the object of composite transform of grid 
            animation.From =content_trans.TranslateX;
            animation.To = 370;
        }
        else if(direction==0)
        {

            animation.From = content_trans.TranslateX;
            animation.To = 0;
        }


        animation.Duration = new TimeSpan(0,0,0,0,500);

        Storyboard.SetTarget(animation, Content);
        Storyboard.SetTargetProperty(animation, new PropertyPath("(UIElement.RenderTransform).(CompositeTransform.TranslateX)"));

        Storyboard sb = new Storyboard();

        sb.Children.Add(animation);
        return sb;
    }

现在我遇到的问题是在调用此函数(并在storyboard对象上调用begin()之后),当我写作时

content_trans.TranslateX=250;//or any other value of my choice 

它没有反映在屏幕上。

我想更改这些值,因为我在Manipulation_Delta中编写了这行代码,这样用户就可以有一种拖动的感觉,但是在动画之后它没有反映出来。

1 个答案:

答案 0 :(得分:0)

这是因为动画值优先于本地值。见Dependency Property Value Precedence

如果您想自己设置值,则需要先停止动画。

编辑:如果您希望能够在动画后拖动,请在动画制作之前手动设置END位置,并告诉动画在完成时停止自我应用:

animation.FillBehaviour = FillBehaviour.Stop;

这意味着当动画结束时,您的本地值将适用。