双重动画强制翻译

本文关键字:翻译 动画 | 更新日期: 2023-09-27 18:11:06

我正在尝试在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中编写了这行代码,这样用户就可以有一种拖动东西的感觉,但在动画之后却没有反映出来。

双重动画强制翻译

这是因为动画值优先于本地值。参见依赖属性值优先级

如果你想自己设置这个值,你需要先停止动画。

EDIT:如果你希望能够在动画之后拖动,那么在动画之前手动设置结束位置,并告诉动画在完成时停止应用:

animation.FillBehaviour = FillBehaviour.Stop;

这意味着当动画结束时,你的本地值将被应用。