跨多个控件同步WPF ColorAnimation

时间:2011-01-18 15:09:17

标签: 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>

干杯!

2 个答案:

答案 0 :(得分:4)

好的......我会抓住这个......

WPF框架没有任何工具来同步同时运行的动画,因此您将不得不想出一个不同的方法。一个想法让人想起......

在故事板中为隐藏UI元素的一些Color属性设置动画,然后使用UI绑定(即ElementName绑定)将每个按钮的Color连接到此隐藏的UI元素。

答案 1 :(得分:1)

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

工作需要满足的要求:

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

嗯,不可否认的是,为此设置Wrapper类也有点hacky但它​​比完全控件更清晰(如果你想使用控件你可以使用一些未使用的Tag - 属性,例如托管所有控件的容器)