我尝试过简单地将故事板复制并粘贴到资源字典中,但它不起作用。那么我怎样才能成功地将故事板动画移动到资源字典中,以便主xaml文件尽可能干净和可读?
以下是我想要进入animationResource.xaml
的代码示例<!-- the story board controlling the grid animation -->
<Storyboard x:Name="MoveBall">
<DoubleAnimation Duration="0:0:1" To="200" Storyboard.TargetProperty="(UIElement.RenderTransform).(TransformGroup.Children)[3].(TranslateTransform.X)" Storyboard.TargetName="grid" d:IsOptimized="True">
<DoubleAnimation.EasingFunction>
<BackEase EasingMode="EaseInOut"/>
</DoubleAnimation.EasingFunction>
</DoubleAnimation>
</Storyboard>
<!-- I've left out all the other default xaml like the layoutRoot grid --->
<Grid x:Name="grid" HorizontalAlignment="Left" Margin="190,180,0,220" Width="80" RenderTransformOrigin="0.5,0.5">
<Grid.RenderTransform>
<TransformGroup>
<ScaleTransform/>
<SkewTransform/>
<RotateTransform/>
<TranslateTransform/>
</TransformGroup>
</Grid.RenderTransform>
<Ellipse Fill="#FFF4F4F5" Stroke="Black"/>
</Grid>
答案 0 :(得分:0)
有关确切不起作用的详细信息可能会有所帮助,但乍一看,当尝试启动此故事板时,您可能会收到错误,因为Storyboard.TargetName无法解析(因为具有此名称的项目不再在同一个文件中。)
此解决方案是在代码中设置Storyboard Target(而不是TargetName),可能在包含要设置动画的网格的对象的构造函数中。这可能看起来像:
Storyboard.SetTarget(App.Current.Resources["MoveBall"] as Storyboard, grid);
您可能还必须删除d:IsOptomized标记或确保在资源字典的顶部定义此命名空间。
值得一提的是,这会让你的Xaml稍微更具可读性,代价是使你的代码更加复杂,这可能不是你想做的那种权衡。