跨多个控件同步WPF ColorAnimation

Flo*_*yon 8 wpf animation synchronization styles

我有几个类似切换的按钮,当我处于按下状态时,我希望它们齐声搏动.

我已经定义了一个带有触发器的样式,该触发器可以启动发光动画,除了每个按钮与其他按钮异步脉动这一事实之外,它的工作正常.

如何让每个按钮与其他按钮同步?

这是风格:

<Storyboard x:Key="pulseStory">
    <ColorAnimation                                                                    
        Storyboard.TargetProperty="(Control.Background).(SolidColorBrush.Color)"
                    From="Red"
                    To="Transparent"
                    Duration="0:0:1" />
</Storyboard>

<Style x:Key="pulseButton" TargetType="Button">
    <Style.Triggers>
        <DataTrigger Binding="{Binding Tag,RelativeSource={RelativeSource Self}}" Value="True">
            <DataTrigger.EnterActions>
                <BeginStoryboard Storyboard="{StaticResource pulseStory}"/>
            </DataTrigger.EnterActions>
        </DataTrigger>
    </Style.Triggers>
</Style>
Run Code Online (Sandbox Code Playgroud)

干杯!

H.B*_*.B. 1

实际上你应该通过资源来做到这一点,至少使用隐藏控件对我个人来说有点太多了。

需要满足什么条件才能发挥作用:

  1. 您绑定到的属性需要是 DependencyProperty,因此您的封装对象需要是 DependencyObject。
  2. 您必须将该对象引用为静态资源(而不是动态资源),如下所示:
<DoubleAnimation
    Storyboard.Target="{StaticResource AnimationValue}"
    Storyboard.TargetProperty="(local:WrappedValue.Value)"
    To="0" Duration="0:0:1"/>
Run Code Online (Sandbox Code Playgroud)

好吧,诚然,为此拥有一个包装类也有点hacky,但它比完全控件更干净(如果您想使用控件,您可以利用一些未使用的属性Tag,例如托管所有控件的容器的属性)