当我更新此TextBlock的源时,我只是想让一些文本暂时闪烁红色。 TextBlock绑定的文本工作正常,但由于某种原因,动画不会被激活。我有点失落。
有什么想法吗?
<Border BorderBrush="{StaticResource Button.BackgroundBrush}"
Background="{StaticResource Screener.Background}"
BorderThickness="0,1,0,0"
HorizontalAlignment="Stretch"
VerticalAlignment="Stretch">
<TextBlock Text="{Binding AlertBoxMessage, Mode=OneWay, NotifyOnSourceUpdated=True}"
Name="AlertBox"
MinHeight="55"
FontWeight="Normal"
FontSize="16"
HorizontalAlignment="Center"
VerticalAlignment="Center"
Foreground="Black">
<TextBlock.Style>
<Style TargetType="{x:Type TextBlock}">
<Style.Triggers>
<EventTrigger RoutedEvent="Binding.SourceUpdated" >
<BeginStoryboard>
<Storyboard Storyboard.TargetProperty="Foreground">
<ColorAnimation From="Black"
To="Red"
AutoReverse="True"
RepeatBehavior="3"
Duration="0:0:2"/>
</Storyboard>
</BeginStoryboard>
</EventTrigger>
</Style.Triggers>
</Style>
</TextBlock.Style>
</TextBlock>
</Border>
答案 0 :(得分:2)
首先,我认为你误解了Binding.SourceUpdated
事件。
每个绑定包含两个端点 - 源和目标。目标是设置绑定的对象,target属性是DependencyProperty
,其值将被绑定,source是要解析Binding.Path
的对象,source属性是属性目标属性绑定的。在您的情况下,目标是TextBlock
,目标属性是Text
,source是(继承的)数据上下文(我认为是视图模型),source属性是AlertBoxMessage
。< / p>
您可能知道绑定可以在多种模式下工作。 TwoWay
将允许在源到目标和目标到源方向上进行更新,而OneWay
只会执行源到目标的更新。
此处的关键信息是,每当发生目标到源传输时都会引发Binding.SourceUpdated
(并且Binding.TargetUpdated
用于源到目标传输,请参阅MSDN)。但是,在您的情况下,值始终在源到目标方向上更新,因为您将绑定模式设置为OneWay
,因此永远不会引发Binding.SourceUpdated
。要实现您的目标,您应该使用Binding.TargetUpdated
事件(将Binding.NotifyOnTargetUpdated
设置为true
)。
但是您的代码还有其他几个问题会阻止它工作,所以让我们来看看它们:
TextBlock.Foreground
为Brush
属性(类型为ColorAnimation
)设置动画,该属性只能用于为{{1}类型的属性设置动画},你将获得Color
。您应该设置InvalidOperationException
StoryBoard.TargetProperty="Foreground.Color"
会使动画重复3天,而不是3次(请参阅this question)。您应该使用RepeatBehavior="3"
总结一下,这里的代码应该符合您的期望:
RepeatBehavior="3x"