如何将silverlight故事板移动到resourceDictionary中?

时间:2010-11-16 11:55:11

标签: silverlight xaml animation storyboard

我尝试过简单地将故事板复制并粘贴到资源字典中,但它不起作用。那么我怎样才能成功地将故事板动画移动到资源字典中,以便主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>

1 个答案:

答案 0 :(得分:0)

有关确切不起作用的详细信息可能会有所帮助,但乍一看,当尝试启动此故事板时,您可能会收到错误,因为Storyboard.TargetName无法解析(因为具有此名称的项目不再在同一个文件中。)

此解决方案是在代码中设置Storyboard Target(而不是TargetName),可能在包含要设置动画的网格的对象的构造函数中。这可能看起来像:

Storyboard.SetTarget(App.Current.Resources["MoveBall"] as Storyboard, grid);

您可能还必须删除d:IsOptomized标记或确保在资源字典的顶部定义此命名空间。

值得一提的是,这会让你的Xaml稍微更具可读性,代价是使你的代码更加复杂,这可能不是你想做的那种权衡。