1

我有一个非常具体的用例,并且在实现它时遇到了一个非常奇怪的问题。在我的 Metro 应用程序中,我想要在用户交互中移动一些图像。比如说,一个棋子的图像。因为,我不能在这里跟随指针移动来制作动画,所以我正在使用情节提要动画来完成任务。

所以,我基本上拥有的是整个游戏板的画布,以及底角的小棋子图像。初始设置很简单,因为我可以手动设置棋子的 Top 和 Left 属性。为了移动棋子,我只是根据移动计算新的 Top 和 Left 属性。例如,如果玩家向上移动 pawn,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 是图像名称。帆布是未命名的。但是,在这里它给了我一个例外,说“无法解决故事板的目标属性”。我错过了要设置的东西吗?或者我应该尝试其他方式来为图像的位置设置动画?如果是,任何想法,这是最好的方法?

4

1 回答 1

2

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

于 2012-10-17T18:20:12.370 回答