Metro应用中的故事板动画和附加属性

时间:2012-10-17 17:11:31

标签: .net windows animation microsoft-metro

我有一个非常具体的用例,在实现它时有一个非常奇怪的问题。在我的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是图像名称。画布未命名。但是,在这里它给了我一个例外,说“无法解决故事板的目标属性”。我错过了要设置的东西吗?或者我应该尝试其他方式来动画图像的位置?如果有,任何想法,这是最好的方式吗?

1 个答案:

答案 0 :(得分:2)

解决了,感谢MSDN。只需要将targetproperty称为“(Canvas.Left)”而不是“Canvas.Left”。