双重动画强制翻译
本文关键字:翻译 动画 | 更新日期: 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;
这意味着当动画结束时,你的本地值将被应用。