2010-05-27 59 views
1

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

可能很明显,但我没看到它。

回答

0

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

+1

嗯,是的。我曾想到过,但我想看看是否有更通用的方法。 另外:需要一些额外的事件的眼睛糖果:糟透了。 – Inferis 2010-06-01 12:56:01

2

要做到这一点完全在XAML中,你需要使用一个EventTrigger,但请记住:

  • 一个EventTrigger只能用RoutedEvent

可以使用。如果目标是触发关闭绑定,您可以使用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事件。