使用 StaticResource 作为 VisualTransition 的 Storyboard 时出错

2024-04-10

我在 Button 控件的 VisualStateGroup 内有一个 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 属性本身,我不会收到错误。所以它似乎不是 Storyboard 本身的任何内容,只是为此使用 StaticResource 的问题。

在研究时,我能找到的关于错误处理的唯一事情是订阅情节提要的 Completed 事件,除非 VisualStateManager 以某种方式执行此操作,否则我不会在任何地方执行此操作。

预先感谢您的任何帮助。

编辑:我还应该补充一点,我想在两个不同的转换中使用它,这就是为什么我更喜欢它是一个 StaticResource,这样我就不必复制/粘贴 xaml。我注释掉了其中一个转换,但仍然收到错误,所以这也不是我正在共享它的事实。


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

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

 <Storyboard x:Shared="False" x:Key="Storyboard_Locked_ToUnlocked">
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 StaticResource 作为 VisualTransition 的 Storyboard 时出错 的相关文章

随机推荐