如何从窗口资源的StoryBoard中的控件资源引用DoubleAnimation?

时间:2015-03-25 15:48:06

标签: wpf xaml storyboard

我正在尝试制作一个“请等待”动画。它可以由4个具有完全相同动画的矩形组成,但略有延迟。

以下是其中一个:

<Rectangle Fill="Blue" Margin="4">
    <Rectangle.Style>
        <Style TargetType="Rectangle">
            <Setter Property="RenderTransform">
                <Setter.Value>
                    <ScaleTransform/>
                </Setter.Value>
            </Setter>
            <Style.Triggers>
                <Trigger Property="Visibility" Value="Visible">
                    <Trigger.EnterActions>
                        <BeginStoryboard x:Name="FlipIt">
                            <Storyboard>
                                <DoubleAnimation Storyboard.TargetProperty="RenderTransform.ScaleY" From="1" To="0" Duration="0:0:1" RepeatBehavior="Forever"/>
                            </Storyboard>
                        </BeginStoryboard>
                    </Trigger.EnterActions>
                    <Trigger.ExitActions>
                        <StopStoryboard BeginStoryboardName="FlipIt"/>
                    </Trigger.ExitActions>
                </Trigger>
            </Style.Triggers>
        </Style>
    </Rectangle.Style>
</Rectangle>

(我在Visibility上使用了一个触发器,所以它不会无用地占用CPU)

所以基本上,我能做的就是简单地为每个矩形复制粘贴这24行XAML Style。但是如果我确定9个矩形看起来更好呢?那会很快疯了。

我的想法是,在我的Window资源中,这个样式,并在每个Rectangle的资源中,DoubleAnimation,无论它想做什么(在9个矩形的情况下,我可能希望中间的旋转而不是缩放在Y轴上。)

问题是:如何引用Rectangle的DoubleAnimation (假设它们都具有相同的x:Key)在我的Style的Storyboard 中(包含在我的窗口资源中)


编辑1:

以下是我认为它应该如何:

Window的资源:

A style named "AnimIt"...
<Style.Triggers>
    <Trigger Property="Visibility" Value="Visible">
        <Trigger.EnterActions>
            <BeginStoryboard x:Name="FlipIt">
                <Storyboard Children="?????????????"/>
            </BeginStoryboard>
        </Trigger.EnterActions>
    ...

矩形:

<Rectangle Style="{StaticResource AnimIt}">
    <Rectangle.Resources>
        <DoubleAnimation x:Key="anim" Storyboard.TargetProperty="RenderTransform.ScaleY" From="1" To="0" Duration="0:0:1" RepeatBehavior="Forever"/>
    </Rectangle.Resources>

我真的不知道该代替“????????”。我尝试使用RelativeSource FindAncestor,但不知道如何在那里引用DoubleAnimation。

0 个答案:

没有答案