我正在尝试在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中编写了这行代码,这样用户就可以有一种拖动的感觉,但是在动画之后它没有反映出来。
答案 0 :(得分:0)
这是因为动画值优先于本地值。见Dependency Property Value Precedence
如果您想自己设置值,则需要先停止动画。
编辑:如果您希望能够在动画后拖动,请在动画制作之前手动设置END位置,并告诉动画在完成时停止自我应用:
animation.FillBehaviour = FillBehaviour.Stop;
这意味着当动画结束时,您的本地值将适用。