3

我在 VisualStateGroup 中有一个用于 Button 控件的 VisualTransition。Storyboard 属性绑定到一个 StaticResource Storyboard:

<VisualTransition From="MyLock" To="Unlocked" GeneratedDuration="0:0:2.0" Storyboard="{StaticResource Storyboard_Locked_ToUnlocked}"/>

当我使用 VisualStateManager 进入“解锁”状态时,出现以下异常:“System.InvalidOperationException:'System.Windows.Media.Animation.Storyboard' 类型的指定值必须将 IsFrozen 设置为 false 才能修改。” 故事板中的任何内容都没有修改故事板本身,所以我不确定这意味着什么。

两件奇怪的事。第一,直到从 VS 2010 迁移到 VS 2012 并安装 .Net 4.5 框架后,这才开始发生。其次,如果我复制所有代码并将其移动到标签内的 Storyboard 属性中,我不会收到错误消息。所以它似乎不是故事板本身的任何东西,只是为此使用 StaticResource 的问题。

在研究时,我唯一能找到的关于订阅故事板的 Completed 事件的错误,我在任何地方都没有这样做,除非 VisualStateManager 以某种方式这样做。

提前感谢您的帮助。

编辑:我还应该补充一点,我想在两个不同的转换中使用它,这就是为什么我更喜欢它是一个静态资源,所以我不必复制/粘贴 xaml。我注释掉了其中一个转换,但仍然出现错误,所以我也不是在分享它。

4

1 回答 1

7

对于遇到此问题的其他人,我找到了解决方案。

只需将 Storyboard 更改为不共享,就可以为每个动画调用创建它,从而消除此错误。在 Storyboard 上将 x:Shared 设置为 False 以执行此操作:

 <Storyboard x:Shared="False" x:Key="Storyboard_Locked_ToUnlocked">
于 2013-07-17T21:43:13.133 回答