WPF 调用 Storyboard报错 “'System.Windows.Media.Animation.Storyboard' 的指定值必须将 IsFrozen 设置为 false 才能修改
今天在WPF 项目中自定义弹出窗口时,打开关闭窗口过渡太生硬,所以加了过渡动画。打开窗口动画正常,但是关闭的时候报错。
“System.InvalidOperationException: 类型为'System.Windows.Media.Animation.Storyboard' 的指定值必须将 IsFrozen 设置为 false 才能修改
代码如下
动画资源代码:
<Storyboard x:Key="HideWindow">
<DoubleAnimation
FillBehavior="Stop"
Storyboard.TargetProperty="Opacity"
From="1"
To="0"
Duration="0:0:0.2" />
</Storyboard>
后台关闭窗口执行动画
[RelayCommand]
void Close()
var story = (Storyboard)App.Current.Resources["HideWindow"];
if (story != null)
story.Completed += delegate { App.DialogWindow.Close(); };
story.Begin(App.DialogWindow);
}
解决方案1:
解决思路:只需将故事板更改为不共享即可为每个动画调用创建故事板,从而消除此错误。所以在定义演示画板Storyboard 时候,设置属性 x:Shared="False" , 代码如下:
<Storyboard x:Key="HideWindow" x:Shared="False">
<DoubleAnimation
FillBehavior="Stop"
Storyboard.TargetProperty="Opacity"
From="1"
To="0"
Duration="0:0:0.2" />
</Storyboard>
解决方案2:
解决思路:不需要再定义演示画板Storyboard 时候不需要设置共享属性,而是在执行动画时克隆一个实例,代码如下
[RelayCommand]
void Close()
var story = (Storyboard)App.Current.Resources["HideWindow"];
story = story.Clone();