通过绑定到 Command 执行动画 DataTrigger

Execute Animation DataTrigger with binding to Command

我尝试使用 DataTrigger 执行动画,但它没有启动。 程序不抛出任何异常和错误。 有人可以解释为什么动画不启动吗?

这是我的故事板

 <Storyboard x:Key="storyboard2" AutoReverse="True" RepeatBehavior="Forever" Duration="00:01:00">

        <DoubleAnimation Storyboard.TargetProperty="(Rectangle.RenderTransform).(ScaleTransform.ScaleX)" Storyboard.Target="{Binding Source={x:Reference RectangleScaleFrom}}" To="4" From="1"/>           
        <DoubleAnimation  Storyboard.TargetProperty="(Rectangle.RenderTransform).(ScaleTransform.ScaleY)" Storyboard.Target="{Binding Source={x:Reference RectangleScaleFrom}}"
                           From="4" To="1"/>
    </Storyboard>" 

这是启动和停止动画的 DataTrigger

 <DataTrigger Binding="{Binding RunAnimation}" Value="True" x:Key="Start">
        <DataTrigger.EnterActions>
            <BeginStoryboard x:Name="BeginScaleFrom" Storyboard="{StaticResource storyboard2}"/>
            <!--<BeginStoryboard x:Name="BeginScaleTo" Storyboard="{StaticResource storyboard2}"/>-->
        </DataTrigger.EnterActions>
    </DataTrigger>
    <DataTrigger Binding="{Binding RunAnimation}" Value="False" x:Key="Stop">
        <DataTrigger.ExitActions>
            <StopStoryboard BeginStoryboardName="BeginScaleFrom"/>
            <!--<StopStoryboard BeginStoryboardName="BeginScaleTo"/>-->
        </DataTrigger.ExitActions>
    </DataTrigger>

这是按钮

  <ToggleButton Grid.Row="2" VerticalAlignment="Center" HorizontalAlignment="Center" Margin="50,20,50,30" FontSize="20" x:Name="StartButton" Style="{StaticResource StartStopButtonStyle}" Width="100" Height="50" Command="{Binding StartAnimation}">
    </ToggleButton>

和启动命令

  private bool _StartAnim = false;
    public bool RunAnimation
    {
        get => _StartAnim;
        set
        {
            _StartAnim = value;
            RaisePropertyChanged(nameof(RunAnimation));
        }
    }
    public RelayCommand StartAnimation { get; private set; }
    public MainViewModel()
    {
        StartAnimation = new RelayCommand(() => RunAnimation = !RunAnimation);

    }

像这样的东西应该可以工作:

<Window.Resources>
    <Storyboard x:Key="storyboard2">
        <DoubleAnimation Storyboard.TargetProperty="RenderTransform.ScaleX"
            To="4" From="1" AutoReverse="True"
            RepeatBehavior="Forever" Duration="00:00:10"/>
        <DoubleAnimation  Storyboard.TargetProperty="RenderTransform.ScaleY"
            From="4" To="1" AutoReverse="True"
            RepeatBehavior="Forever" Duration="00:00:10"/>
    </Storyboard>
</Window.Resources>

<Rectangle Width="100" Height="100" Fill="Red">
    <Rectangle.Style>
        <Style TargetType="Rectangle">
            <Setter Property="RenderTransform">
                <Setter.Value>
                    <ScaleTransform/>
                </Setter.Value>
            </Setter>
            <Style.Triggers>
                <DataTrigger Binding="{Binding RunAnimation}" Value="True">
                    <DataTrigger.EnterActions>
                        <BeginStoryboard x:Name="BeginScaleFrom"
                            Storyboard="{StaticResource storyboard2}"/>
                    </DataTrigger.EnterActions>
                    <DataTrigger.ExitActions>
                        <StopStoryboard BeginStoryboardName="BeginScaleFrom"/>
                    </DataTrigger.ExitActions>
                </DataTrigger>
            </Style.Triggers>
        </Style>
    </Rectangle.Style>
</Rectangle>