如何在 WPF 中的用户控件之间同步动画



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

<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 启动情节提要,会更好吗?

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

我从以下站点获得了想法和示例代码:如何在 wpf 中的用户控件之间同步动画

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

显然,这需要修改,但是在颜色过渡上尝试持续时间为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>

最新更新