WPF MultiDataTrigger 动画不正确的行为

WPF MultiDataTrigger animation incorrect behavior

我需要 Canvas 中的一个小方块根据视图模型的属性设置动画,这里是 XAML

<Style x:Key="FlashingRectStyle">
 <Style.Triggers>

                <!-- HasPath & IsBig -->

                <MultiDataTrigger>
                    <MultiDataTrigger.Conditions>
                        <Condition Binding="{Binding Path=HasPath}" Value="True" />
                        <Condition Binding="{Binding Path=IsBig}" Value="True" />
                    </MultiDataTrigger.Conditions>
                    <MultiDataTrigger.EnterActions>
                        <BeginStoryboard>
                            <Storyboard>
                                <DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="(Canvas.Left)" Duration="0:0:3" RepeatBehavior="Forever">
                                    <DiscreteDoubleKeyFrame Value="20" KeyTime="0:0:0" />
                                    <DiscreteDoubleKeyFrame Value="20" KeyTime="0:0:1" />
                                    <DiscreteDoubleKeyFrame Value="190" KeyTime="0:0:2" />
                                </DoubleAnimationUsingKeyFrames>
                                <DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="(Canvas.Top)" Duration="0:0:3" RepeatBehavior="Forever">
                                    <DiscreteDoubleKeyFrame Value="30" KeyTime="0:0:0" />
                                    <DiscreteDoubleKeyFrame Value="115" KeyTime="0:0:1" />
                                    <DiscreteDoubleKeyFrame Value="35" KeyTime="0:0:2" />
                                </DoubleAnimationUsingKeyFrames>
                            </Storyboard>
                        </BeginStoryboard>
                    </MultiDataTrigger.EnterActions>
                </MultiDataTrigger>

                <!-- HasPath & Not IsBig -->

                <MultiDataTrigger>
                    <MultiDataTrigger.Conditions>
                        <Condition Binding="{Binding Path=HasPath}" Value="True" />
                        <Condition Binding="{Binding Path=IsBig}" Value="False" />
                    </MultiDataTrigger.Conditions>
                    <MultiDataTrigger.EnterActions>
                        <BeginStoryboard>
                            <Storyboard>
                                <DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="(Canvas.Left)" Duration="0:0:3" RepeatBehavior="Forever">
                                    <DiscreteDoubleKeyFrame Value="77" KeyTime="0:0:0" />
                                    <DiscreteDoubleKeyFrame Value="73" KeyTime="0:0:1" />
                                    <DiscreteDoubleKeyFrame Value="138" KeyTime="0:0:2" />
                                </DoubleAnimationUsingKeyFrames>
                                <DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="(Canvas.Top)" Duration="0:0:3" RepeatBehavior="Forever">
                                    <DiscreteDoubleKeyFrame Value="57" KeyTime="0:0:0" />
                                    <DiscreteDoubleKeyFrame Value="97" KeyTime="0:0:1" />
                                    <DiscreteDoubleKeyFrame Value="53" KeyTime="0:0:2" />
                                </DoubleAnimationUsingKeyFrames>
                            </Storyboard>
                        </BeginStoryboard>
                    </MultiDataTrigger.EnterActions>
                </MultiDataTrigger>

                <!-- Not HasPath-->

                <DataTrigger Binding="{Binding Path=HasPath}" Value="False">
                    <Setter Property="Canvas.Left" Value="105" />
                    <Setter Property="Canvas.Top" Value="75" />
                </DataTrigger>

            </Style.Triggers>
        </Style>

和用法

<Canvas>
    <Rectangle Style="{StaticResource FlashingRectStyle}" Width="30" Height="20" />
</Canvas>

HasPath 和 IsBig 的默认值均为 True,第一个动画块 "HasPath & IsBig" 动画正确。
此外,如果我将 IsBig 更改为 false "HasPath & Not IsBig" 会开始动画。
但是如果我随后将 IsBig 更改回 true - 什么都不会发生并且 "HasPath & Not IsBig" 会继续动画。
此外,如果我将 HasPath 设置为 false,它应该会触发 "Not HasPath" 但它不会。如何让它在属性更改时动态切换动画?

在添加新故事板之前,您需要删除 ExitActions 中以前的故事板:

<MultiDataTrigger>
   <MultiDataTrigger.Conditions>
      <Condition Binding="{Binding Path=HasPath}" Value="True" />
      <Condition Binding="{Binding Path=IsBig}" Value="False" />
   </MultiDataTrigger.Conditions>
   <MultiDataTrigger.EnterActions>
      <BeginStoryboard x:Name="BeginStoryboardName">
         <Storyboard>
            <DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="(Canvas.Left)" 
                                           Duration="0:0:3" RepeatBehavior="Forever">
               <DiscreteDoubleKeyFrame Value="77" KeyTime="0:0:0" />
               <DiscreteDoubleKeyFrame Value="73" KeyTime="0:0:1" />
               <DiscreteDoubleKeyFrame Value="138" KeyTime="0:0:2" />
            </DoubleAnimationUsingKeyFrames>
            <DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="(Canvas.Top)" 
                                           Duration="0:0:3" RepeatBehavior="Forever">
               <DiscreteDoubleKeyFrame Value="57" KeyTime="0:0:0" />
               <DiscreteDoubleKeyFrame Value="97" KeyTime="0:0:1" />
               <DiscreteDoubleKeyFrame Value="53" KeyTime="0:0:2" />
            </DoubleAnimationUsingKeyFrames>
         </Storyboard>
      </BeginStoryboard>
   </MultiDataTrigger.EnterActions>
   <MultiDataTrigger.ExitActions>
      <RemoveStoryboard BeginStoryboardName="BeginStoryboardName"/>
   </MultiDataTrigger.ExitActions>
</MultiDataTrigger>