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