我在一个VisualStateGroup内部有一个VisualTransition,用于Button控件。故事板属性绑定到StaticResource故事板:
<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以某种方式进行,否则我不会在任何地方进行此操作。
提前感谢您的帮助。
编辑:我还应该补充一点,我想在两个不同的过渡中使用它,这就是为什么我更希望它是一个StaticResource,所以我不必复制/粘贴xaml。我注释了其中一个转换,但仍然出现错误,因此也不是我也要共享它。
对于遇到此问题的其他人,我已经找到了解决方案。
只需将故事板更改为不共享,即可为每个动画调用创建故事板,从而避免了此错误。在情节提要板上将x:Shared设置为False即可:
<Storyboard x:Shared="False" x:Key="Storyboard_Locked_ToUnlocked">