我正在尝试制作一个“请等待”动画。它可以由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。