当数据绑定属性更改为* any *值时显示动画

时间:2010-05-27 10:30:51

标签: wpf triggers binding

是否有办法将触发器(和后续动画)附加到具有属性数据绑定的控件,并在该数据绑定属性的值更改(为任意值)时触发该触发器。我不在乎它是什么价值,我只想在价值变为其他东西时显示通知。

可能非常明显,但我没有看到它。

2 个答案:

答案 0 :(得分:2)

要在XAML中完全执行此操作,您需要使用EventTrigger,但请记住:

  • EventTrigger只能与RoutedEvent一起使用

如果目标是触发Binding,则可以使用Binding.TargetUpdated路由事件。为了引发此事件,必须将NotifyOnTargetUpdated = True添加到绑定表达式中。现在,每次更新绑定表达式的目标时,都会播放指定的动画。

<TextBox Text={Binding ... NotifyOnTargetUpdated=True}>
  <TextBox.Triggers>
    <EventTrigger RoutedEvent="Binding.TargetUpdated">
      <EventTrigger.Actions>
        <BeginStoryboard>
          <Storyboard AutoReverse="True" BeginTime="0:0:0" Duration="0:0:0.5">
            <ColorAnimation
              Storyboard.TargetProperty="(TextBox.Background).(SolidColorBrush.Color)"
              From="White"
              To="Lavender"
              />
          </Storyboard>
        </BeginStoryboard>
      </EventTrigger.Actions>
    </EventTrigger>
  </TextBox.Triggers>
</TextBox>

此外,您可以通过指定特定事件来优化触发动画的方式和时间,无论应用何种绑定。例如,要仅在Text属性更改时触发动画,请改为使用TextBox.TextChanged事件。

答案 1 :(得分:0)

最简单的方法是在您手动引发的ViewModel中添加一个额外的事件,并绑定EventTrigger。你有一个ViewModel,不是吗? ;)