我正在Polygon
上绘制Canvas
作为电池指示器。如果电池百分比下降到阈值以下,则多边形应开始执行脉冲动画,如果电池百分比恢复到阈值以上,则应停止脉冲。为此,我使用了绑定到视图模型中的DataTrigger
的{{1}},该模型告诉我当前是否运行脉冲动画循环。
首先,关闭动画,并且一旦百分比降低,它就会按预期开始脉动。但是,当百分比水平再次上升时,我找不到任何方法使跳动的动画停止。
这是我当前的XAML代码:
bool
我发现了两个与此用例相同的问题(1,2),<Polygon.Style>
<Style TargetType="Polygon">
<Style.Triggers>
<DataTrigger
Binding="{Binding IsLowPercentage}"
Value="True">
<DataTrigger.EnterActions>
<BeginStoryboard Name="Pulse">
<Storyboard>
<DoubleAnimation
AutoReverse="True"
RepeatBehavior="Forever"
Storyboard.TargetProperty="Opacity"
From="1"
To="0.2" />
</Storyboard>
</BeginStoryboard>
</DataTrigger.EnterActions>
<DataTrigger.ExitActions>
<StopStoryboard BeginStoryboardName="Pulse" />
<!--<RemoveStoryboard BeginStoryboardName="Pulse" />-->
<!--<BeginStoryboard>
<Storyboard>
<DoubleAnimation
Storyboard.TargetProperty="Opacity"
To="1"
Duration="0:0:0.2" />
</Storyboard>
</BeginStoryboard>-->
</DataTrigger.ExitActions>
</DataTrigger>
</Style.Triggers>
</Style>
</Polygon.Style>
似乎对他们有用,但对我来说却不是。 / p>
在StopStoryboard
旁边,我还尝试了StopStoryboard
和另一个RemoveStoryboard
(因为根据this answer,如果新的故事板具有相同的依赖属性,则故事板会自动停止)。有关代码显示在注释部分中。我测试了所有组合,分别是BeginStoryboard
,Stop
,Remove
,Begin
,Stop+Remove
,Stop+Begin
或Remove+Begin
组合,但似乎无济于事,脉冲效果会一直持续下去。
我也考虑了different naming scopes的问题,但是与使用{{1}的this example相比,我的故事板的命名范围更近(相同 Stop+Remove+Begin
) },并且我的代码也与Microsoft的this other example非常相似,但是我的动画是无限的。
我已经验证了DataTrigger
实际上是否分别设置为StopStoryboard
或bool
,并且我看到绑定到同一视图模型的所有其他值都显示了来自该视图模型,所以应该没问题。
使用true
的每个人似乎都不错,但是我的代码有误,因此对我不起作用。