更新源时不触发WPF TextBlock动画
我只是想在更新这个文本块的源代码时,让一些文本瞬间闪烁成红色。TextBlock绑定到的文本工作正常,但由于某些原因,动画无法启动。我有点不知所措 有什么想法吗更新源时不触发WPF TextBlock动画,wpf,xaml,Wpf,Xaml,我只是想在更新这个文本块的源代码时,让一些文本瞬间闪烁成红色。TextBlock绑定到的文本工作正常,但由于某些原因,动画无法启动。我有点不知所措 有什么想法吗 <Border BorderBrush="{StaticResource Button.BackgroundBrush}" Background="{StaticResource Screener.Background}" Bo
<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>
首先,我认为您误解了Binding.SourceUpdated事件 每个绑定由两个端点组成—一个源和一个目标。目标是在其上设置绑定的对象,目标属性是将绑定其值的
DependencyProperty
,源是将解析绑定的对象。路径
,源属性是将目标属性绑定到的属性。在您的例子中,目标是TextBlock
,目标属性是Text
,源是(继承的)数据上下文(我认为是视图模型),源属性是AlertBoxMessage
您可能知道绑定可以在几种模式下工作<代码>双向将允许在源到目标和目标到源的两个方向进行更新,而单向
将只进行源到目标的更新
这里的关键信息是,每当目标到源传输发生时,Binding.SourceUpdated
将被触发(对于源到目标传输,请参阅Binding.TargetUpdated
)。但是,在您的情况下,该值总是在源到目标的方向上更新,因为您将绑定模式设置为单向,因此永远不会引发binding.SourceUpdated。为了实现您的目标,您应该使用Binding.TargetUpdated
事件(将Binding.NotifyOnTargetUpdated
设置为true
)
但是,您的代码还存在一些其他问题,这些问题将阻止它工作,所以让我们来讨论一下:
ColorAnimation
设置TextBlock.Foreground
属性(类型为Brush
)的动画,该属性只能用于设置类型为Color
的属性的动画,并且您将得到一个invalidoOperationException
。您应该设置StoryBoard.TargetProperty=“Foreground.Color”
RepeatBehavior=“3”
将使动画重复3天,而不是3次(请参阅)。您应该使用RepeatBehavior=“3x”
<TextBlock Text="{Binding AlertBoxMessage, Mode=OneWay, NotifyOnTargetUpdated=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.TargetUpdated">
<BeginStoryboard>
<Storyboard Storyboard.TargetProperty="Foreground.Color">
<ColorAnimation From="Black"
To="Red"
AutoReverse="True"
RepeatBehavior="3x"
Duration="0:0:2"/>
</Storyboard>
</BeginStoryboard>
</EventTrigger>
</Style.Triggers>
</Style>
</TextBlock.Style>
</TextBlock>
首先,我认为您误解了Binding.SourceUpdated事件 每个绑定由两个端点组成—一个源和一个目标。目标是在其上设置绑定的对象,目标属性是将绑定其值的
DependencyProperty
,源是将解析绑定的对象。路径
,源属性是将目标属性绑定到的属性。在您的例子中,目标是TextBlock
,目标属性是Text
,源是(继承的)数据上下文(我认为是视图模型),源属性是AlertBoxMessage
您可能知道绑定可以在几种模式下工作<代码>双向将允许在源到目标和目标到源的两个方向进行更新,而单向
将只进行源到目标的更新
这里的关键信息是,每当目标到源传输发生时,Binding.SourceUpdated
将被触发(对于源到目标传输,请参阅Binding.TargetUpdated
)。但是,在您的情况下,该值总是在源到目标的方向上更新,因为您将绑定模式设置为单向,因此永远不会引发binding.SourceUpdated。为了实现您的目标,您应该使用Binding.TargetUpdated
事件(将Binding.NotifyOnTargetUpdated
设置为true
)
但是,您的代码还存在一些其他问题,这些问题将阻止它工作,所以让我们来讨论一下:
ColorAnimation
设置TextBlock.Foreground
属性(类型为Brush
)的动画,该属性只能用于设置类型为Color
的属性的动画,并且您将得到一个invalidoOperationException
。您应该设置StoryBoard.TargetProperty=“Foreground.Color”
RepeatBehavior=“3”
将使动画重复3天,而不是3次(请参阅)。您应该使用RepeatBehavior=“3x”
<TextBlock Text="{Binding AlertBoxMessage, Mode=OneWay, NotifyOnTargetUpdated=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.TargetUpdated">
<BeginStoryboard>
<Storyboard Storyboard.TargetProperty="Foreground.Color">
<ColorAnimation From="Black"
To="Red"
AutoReverse="True"
RepeatBehavior="3x"
Duration="0:0:2"/>
</Storyboard>
</BeginStoryboard>
</EventTrigger>
</Style.Triggers>
</Style>
</TextBlock.Style>
</TextBlock>
试试这个?试试这个?非常感谢。你的帖子非常有用。我只是为了好玩才这么做的,所以我在这方面还是个新手。有时,我只是直接编写代码,不去想我是在处理目标/源代码,还是希望我的绑定模式是单向的还是单向的源代码。我也忘了考虑刷子而不是颜色。