WPF:样式中的情节提要返回“无法在不可变对象示例上设置'Color'的动画”,

hs1ihplo  于 2023-06-30  发布在  其他
关注(0)|答案(2)|浏览(206)

我有以下XAML:

<UserControl.Resources>
    <SolidColorBrush x:Key="Brush"></SolidColorBrush>

    <Style TargetType="{x:Type StackPanel}" x:Key="ColourChangingStyle">
        <Setter Property="Background" Value="{StaticResource Brush}" />

        <Style.Triggers>
            <DataTrigger Binding="{Binding Path='Stage'}" Value="1">
                <DataTrigger.EnterActions>
                    <BeginStoryboard>
                        <Storyboard>
                            <ColorAnimation Storyboard.Target="{StaticResource Brush}"
                              Storyboard.TargetProperty="Color" From="{StaticResource FirstColor}" To="{StaticResource FinishedColor}" Duration="0:0:10" BeginTime="0:0:0"/>
                        </Storyboard>
                    </BeginStoryboard>
                </DataTrigger.EnterActions>
            </DataTrigger>
        </Style.Triggers>
    </Style>
</UserControl.Resources>

<StackPanel x:Name="InfoPanel" Orientation="Vertical"  Margin="1,2" Style="{DynamicResource ColourChangingStyle}">
 ...
</StackPanel>

我一直得到同样的错误:
无法在不可变对象示例上设置“Color”的动画
也就是刷子我查找了这个问题,并认为这是与绑定刷到StackPanel使其无法更改以后。
有没有什么方法可以解决这个问题,我真的不知道我的其他选择相同的效果是没有硬编码的颜色,并在代码中做所有的事件。

8iwquhpp

8iwquhpp1#

看起来你不能用Storyboard.TargetResources中动画一个Brush。但是您可以设置StyleBackground(您已经这样做了)并设置此属性的动画。

<ColorAnimation Storyboard.TargetProperty="Background.Color"
                From="{StaticResource FirstColor}"
                To="{StaticResource FinishedColor}" 
                Duration="0:0:10" BeginTime="0:0:0" />
2izufjch

2izufjch2#

您可以从代码后面检查颜色状态,以检查出颜色是否为“冻结”,以防止出现该异常。

private void CheckAnimationFrozen()
{
    // ...
    // Frozen brush unable to begin animation
    if (CircleColor.IsFrozen)
    {
        CircleColor = new SolidColorBrush(CircleColor.Color);
    }
    
    // ...
}

相关问题