gpt4 book ai didi

WPF 动画仅触发一次

转载 作者:行者123 更新时间:2023-12-02 00:35:40 25 4
gpt4 key购买 nike

我有一个小椭圆,每次依赖属性设置为 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,该控件绑定(bind)到实现 INotifyPropertyChanged 的​​ View 模型。然后我尝试删除控件上的 DP 并将我的 View 模型属性转换为 DP。繁荣,就在那时我开始收到一个错误,指出另一个线程拥有该对象。我意识到我需要使用响应式(Reactive)扩展来合并一些可观察对象,就像我在应用程序的其他部分所做的那样。我使用 PropertyChanged() 恢复到 View 模型传统属性,并将其简单地绑定(bind)到控件的动画。现在一切都完美无缺。

最佳答案

我遇到了类似的问题,当 DP 更改时,我会触发“输入”和“输出”动画。第一个周期运行良好,但此后什么也没发生。我通过在 BeginStoryboard 操作之前添加 RemoveStoryboard EnterActions 解决了这个问题。

<Border Name="Zyzzyx" Grid.Row="1" Background="DarkRed" Height="0" VerticalAlignment="Bottom">
<Border.Style>
<Style>
<Style.Triggers>
<DataTrigger Binding="{Binding Path=SelectionState, ElementName=ControlRoot, Mode=OneWay}" Value="Selecting">
<DataTrigger.EnterActions>
<RemoveStoryboard BeginStoryboardName="AnimateIn" />
<RemoveStoryboard BeginStoryboardName="AnimateOut" />
<BeginStoryboard Name="AnimateIn" HandoffBehavior="SnapshotAndReplace">
<Storyboard FillBehavior="HoldEnd" Duration="0:0:5">
<DoubleAnimation To="30" Duration="0:0:5" Storyboard.TargetProperty="Height" />
</Storyboard>
</BeginStoryboard>
</DataTrigger.EnterActions>
</DataTrigger>
<DataTrigger Binding="{Binding Path=SelectionState, ElementName=ControlRoot, Mode=OneWay}" Value="Deselecting">
<DataTrigger.EnterActions>
<RemoveStoryboard BeginStoryboardName="AnimateIn" />
<RemoveStoryboard BeginStoryboardName="AnimateOut" />
<BeginStoryboard Name="AnimateOut" HandoffBehavior="SnapshotAndReplace">
<Storyboard FillBehavior="HoldEnd" Duration="0:0:5">
<DoubleAnimation To="0" Duration="0:0:5" Storyboard.TargetProperty="Height" />
</Storyboard>
</BeginStoryboard>
</DataTrigger.EnterActions>
</DataTrigger>
</Style.Triggers>
</Style>
</Border.Style>

<!-- Border content -->

</Border>

关于WPF 动画仅触发一次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11945084/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com