7

我在包装面板中创建了几个用户控件。我有一个绑定到用户控件的视图模型,并且我有一个动画触发到视图模型中的属性。非常简单的将颜色从红色切换为透明以模拟闪烁。

<Storyboard x:Key="alertAnimation" RepeatBehavior="Forever" AutoReverse="True" >
    <ColorAnimationUsingKeyFrames Storyboard.TargetProperty="(Border.BorderBrush).(SolidColorBrush.Color)"
                                  Storyboard.TargetName="TileBorder"
                                  BeginTime="00:00:00"
                                  RepeatBehavior="Forever"
                                  AutoReverse="True"
                                  >
        <DiscreteColorKeyFrame Value="Red"/>
        <DiscreteColorKeyFrame KeyTime="00:00:00.500" Value="Transparent" />
    </ColorAnimationUsingKeyFrames>

</Storyboard>

这工作得很好。但是,由于我异步加载多个用户控件,闪烁动画不同步,因此它们都在不同时间闪烁。现在要求屏幕上闪烁的任何东西都需要以相同的速率/时间闪烁。有没有办法同步这些动画?我似乎无法在任何地方找到适合我想要完成的示例。有没有办法使用 ParallelTimeline,将所有动画添加到其中并从单个控制器启动/停止它们?有什么例子可以做到这一点吗?

编辑 4/20 在 style.xaml 文件中定义动画并有一个“全局”故事板,每个控件都将其“闪烁”动画添加到其中并让主 UI 启动故事板会更好吗?

4

2 回答 2

3

我找不到跨多个用户控件控制多个动画的好方法,所以我最终没有在用户控件中使用动画,而是使用动画来简单地更改静态对象中的依赖属性,并让所有需要以某种方式闪烁的用户控件绑定到那个属性。有多种方法可以产生我想要的结果,但最终我现在有一种方法可以让我的所有控件知道闪烁何时打开然后关闭,以便一切都同步。

我从以下站点得到了这个想法和示例代码: How to synchronize animations across usercontrols in wpf

我对其进行了一些修改,但总的来说它完全符合我的需要。

于 2012-04-20T18:25:34.823 回答
0

显然这需要修改,但是在颜色转换上尝试 0 的持续时间可能会给您带来更少开销的闪烁。它可能不会。只是要尝试的东西。

    <Rectangle Name="MyRectangle" Width="100" Height="100">
        <Rectangle.Fill>
            <SolidColorBrush x:Name="MySolidColorBrush" Color="Blue" />
        </Rectangle.Fill>
        <Rectangle.Triggers>
            <EventTrigger RoutedEvent="Rectangle.MouseEnter">
                <BeginStoryboard>
                    <Storyboard>
                        <DoubleAnimation 
            Storyboard.TargetName="MyRectangle"
            Storyboard.TargetProperty="Width"
            From="100" To="200" Duration="0:0:1" />

                        <ColorAnimation 
            Storyboard.TargetName="MySolidColorBrush"
            Storyboard.TargetProperty="Color"
            From="Blue" To="Red" BeginTime="0:0:1"  Duration="0:0:0"  />
                    </Storyboard>
                </BeginStoryboard>
            </EventTrigger>
        </Rectangle.Triggers>
    </Rectangle>
于 2012-04-19T13:41:28.177 回答