You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

运行时Storyboard抛出异常:TransformCollection实例不可变问题

问题分析与解决方案

异常原因

TransformGroup.Children默认是不可变的只读集合,WPF运行时不允许通过索引路径(如(TransformGroup.Children)[3])直接修改集合内元素的属性。Blend设计环境做了兼容性处理,因此在Blend中运行正常,但实际Runtime会触发不可变实例的异常。

解决方案:给Transform命名,直接绑定属性

最简洁可靠的修复方式是给TransformGroup内需要动画的具体Transform命名,直接绑定到它们的属性,而非通过集合索引访问。

步骤1:修改Border的RenderTransform部分

给ScaleTransform和TranslateTransform添加x:Name:

<Border x:Name="Placeholder"
        RenderTransformOrigin="0.5,0.5"
        Style="{StaticResource NavPlaceholderStyle}">
    <Border.RenderTransform>
        <TransformGroup>
            <ScaleTransform x:Name="PlaceholderScaleTransform"/>
            <SkewTransform/>
            <RotateTransform/>
            <TranslateTransform x:Name="PlaceholderTranslateTransform"/>
        </TransformGroup>
    </Border.RenderTransform>
</Border>

步骤2:修改Storyboard的TargetProperty

直接指向命名Transform的属性,移除集合索引路径:

<Window.Resources>
    <Storyboard x:Key="Storyboard1">
        <DoubleAnimationUsingKeyFrames Storyboard.TargetName="PlaceholderTranslateTransform" Storyboard.TargetProperty="Y">
            <EasingDoubleKeyFrame KeyTime="00:00:00" Value="90"/>
            <EasingDoubleKeyFrame KeyTime="00:00:00.3000000" Value="100"/>
            <EasingDoubleKeyFrame KeyTime="00:00:00.6000000" Value="200"/>
        </DoubleAnimationUsingKeyFrames>
        <DoubleAnimationUsingKeyFrames Storyboard.TargetName="PlaceholderScaleTransform" Storyboard.TargetProperty="ScaleY">
            <EasingDoubleKeyFrame KeyTime="00:00:00.3000000" Value="1"/>
            <EasingDoubleKeyFrame KeyTime="00:00:00.5000000" Value="2"/>
            <EasingDoubleKeyFrame KeyTime="00:00:00.6000000" Value="1"/>
        </DoubleAnimationUsingKeyFrames>
    </Storyboard>
</Window.Resources>

验证修改

保持后台代码不变:

Storyboard storyboard = (Storyboard)FindResource("Storyboard1");
storyboard.Begin();

修改后Runtime即可正常运行动画,不会再抛出异常。


内容的提问来源于stack exchange,提问作者NewCode82

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.21 13:07:36