我有一个小椭圆,每次依赖属性设置为 true 时我都想闪烁它。因为该属性可以在几毫秒内快速从 true 变为 false,所以我需要使用动画而不是简单的样式数据触发器来执行此操作。基本上,我只想要真正的价值来 ping 椭圆上的动画。
<Ellipse Height="10" Width="10" Stroke="#FFFFFFFF" Margin="5,3,0,0">
<Ellipse.Fill>
<SolidColorBrush />
</Ellipse.Fill>
<Ellipse.Style>
<Style>
<Style.Triggers>
<DataTrigger Binding="{Binding IsReceiving}" Value="True" >
<DataTrigger.EnterActions>
<BeginStoryboard>
<Storyboard>
<ColorAnimationUsingKeyFrames Storyboard.TargetProperty="Fill.Color">
<ColorAnimationUsingKeyFrames.KeyFrames>
<DiscreteColorKeyFrame KeyTime="0:0:0" Value="Red"/>
<DiscreteColorKeyFrame KeyTime="0:0:0.25" Value="Transparent"/>
</ColorAnimationUsingKeyFrames.KeyFrames>
</ColorAnimationUsingKeyFrames>
</Storyboard>
</BeginStoryboard>
</DataTrigger.EnterActions>
</DataTrigger>
</Style.Triggers>
</Style>
</Ellipse.Style>
</Ellipse>
此动画似乎有效,但仅在值第一次达到 true 时触发。我错过了什么吗?
更新:感谢大家的投入。事实证明,这是一个线程问题。最初,我在控件上有一个 DP,该控件绑定到实现 INotifyPropertyChanged 的视图模型。然后我尝试删除控件上的 DP 并将我的视图模型属性转换为 DP。繁荣,那时我开始收到一个错误,指出另一个线程拥有该对象。我意识到我需要像在应用程序的其他部分中所做的那样,使用响应式扩展来合并一些 Observable。我使用 PropertyChanged() 恢复到视图模型的传统属性,并将其简单地绑定到控件的动画。现在一切都完美无缺。