基于布尔值触发动画时出错

本文关键字:动画 出错 于布尔 | 更新日期: 2023-09-27 18:19:56

有一个按钮,当ViewModel上的IsBusy布尔属性为True时,该按钮将被设置为动画:

<Button x:Name="button" Grid.Row="4"
        Command="{Binding QuitCommand}" 
        Content="{x:Static r:Resources.Close}" 
        RenderTransformOrigin="0.5,0.5">
    <Button.Style>
        <Style TargetType="Button">
            <Style.Triggers>
                <DataTrigger Binding="{Binding IsBusy}" Value="True">
                    <DataTrigger.EnterActions>
                        <BeginStoryboard Storyboard="{StaticResource TestStoryboard}"/>
                    </DataTrigger.EnterActions>
                </DataTrigger> **<-- here is line 167 position 27**
            </Style.Triggers>
        </Style>
    </Button.Style>
    <Button.RenderTransform>
        <TransformGroup>
            <ScaleTransform/>
            <SkewTransform/>
            <RotateTransform/>
            <TranslateTransform/>
        </TransformGroup>
    </Button.RenderTransform>
</Button>

情节提要:

<Window.Resources>
    <Storyboard x:Key="TestStoryboard">
        <DoubleAnimationUsingKeyFrames 
        Storyboard.TargetProperty="(UIElement.RenderTransform).(TransformGroup.Children)[2].(RotateTransform.Angle)">
            <EasingDoubleKeyFrame KeyTime="0:0:0.5" Value="25"/>
            <EasingDoubleKeyFrame KeyTime="0:0:1" Value="180"/>
        </DoubleAnimationUsingKeyFrames>
    </Storyboard>
</Window.Resources>

如果我将IsBusy属性初始化为false,然后稍后启动动画,则一切正常。

如果我将IsBusy属性初始化为true,则会出现以下错误:

"[未知]"属性未指向路径中的DependencyObject'(0)。(1) [2]。(2) '。'Set属性"System.Windows.FrameworkElement.Style"引发异常线编号"167"和行位置"27"。

视图模型:

public const string IsBusyPropertyName = "IsBusy";
private bool _IsBusy = true;
public bool IsBusy
{
    get
    {
        return _IsBusy;
    }
    set
    {
        if (_IsBusy == value)
        {
            return;
        }
        RaisePropertyChanging(IsBusyPropertyName);
        _IsBusy = value;
        RaisePropertyChanged(IsBusyPropertyName);
    }
}

时间问题?

基于布尔值触发动画时出错

设置

 <Button.RenderTransform>
    <TransformGroup>
        <ScaleTransform/>
        <SkewTransform/>
        <RotateTransform/>
        <TranslateTransform/>
    </TransformGroup>
</Button.RenderTransform>

之前

    <Button.Style>
    <Style TargetType="Button">
        <Style.Triggers>
            <DataTrigger Binding="{Binding IsBusy}" Value="True">
                <DataTrigger.EnterActions>
                    <BeginStoryboard Storyboard="{StaticResource TestStoryboard}"/>
                </DataTrigger.EnterActions>
            </DataTrigger> **<-- here is line 167 position 27**
        </Style.Triggers>
    </Style>
</Button.Style>

如果这已经是真的,那么我相信它会在设置RenderTransform之前调用故事板。