我有一个非常具体的用例,在实现它时有一个非常奇怪的问题。在我的Metro应用程序中,我有一些我想要移动用户交互的图像。比方说,例如,国际象棋棋子的图像。因为,我不能在这里跟踪指针移动动画,我正在使用故事板动画来完成任务。
所以,我基本上拥有的是整个游戏板的Canvas,以及底角的小棋子图像。初始设置很简单,因为我可以手动设置国际象棋棋子的Top和Left属性。为了移动棋子,我只是根据移动来计算新的Top和Left属性。例如,如果玩家向上移动棋子,则Top的值会改变(Canvas.Height / 8),但Left属性保持不变。现在,直到这里,一切都很好。唯一的问题是,这会导致图像从初始位置跳到最终位置,而不是平滑移动。
因此,我创建了故事板,用于为顶部和左侧位置设置动画,如下所示。
<Storyboard x:Key="storyboard">
<DoubleAnimation x:Name="playerLeftAnimation" Storyboard.TargetName="playerPiece"
Storyboard.TargetProperty="Canvas.Left"
EnableDependentAnimation="True"
Duration="0:0:2" />
<DoubleAnimation x:Name="playerTopAnimation" Storyboard.TargetName="playerPiece"
Storyboard.TargetProperty="Canvas.Top"
EnableDependentAnimation="True"
Duration="0:0:2" />
</Storyboard>
如果我将此方法用于Fontsize等普通依赖项属性,则效果很好。这里的playerPiece是图像名称。画布未命名。但是,在这里它给了我一个例外,说“无法解决故事板的目标属性”。我错过了要设置的东西吗?或者我应该尝试其他方式来动画图像的位置?如果有,任何想法,这是最好的方式吗?
答案 0 :(得分:2)
解决了,感谢MSDN。只需要将targetproperty称为“(Canvas.Left)”而不是“Canvas.Left”。