CanFreeze何时可以使用?
问题描述:
在冻结对象之前是否需要始终检查CanFreeze
。CanFreeze何时可以使用?
如果我看PresentationOptions:Freeze
用于标记,它没有完成。因此我不认为,必须在everey对象创建之前调用CanFreeze。
但CanFreeze何时可以使用?
答
你不必调用CanFreeze
但如果你不这样做,你的目标是不可冻结的InvalidOperationException
将被抛出(见冻结的"remarks"部分())。所以CanFreeze
是一个选项,允许你调用Freeze()而不会冒任何异常。
有几种情况下,调用Freeze()会导致异常。从Freeze()
参考 直接报价:
无法冻结可冻结对象 如果满足下列条件 任何一个是关于对象的真实:
它有动画或数据绑定 性质。
它具有由 动态资源设置的属性。有关动态资源的更多信息,请参阅 资源概述。
它包含无法冻结 的Freezable子对象。
+1是的,但在这种情况下是否有必要?什么时候出现问题?如果我创建一个SolidColorBrush的新实例?可能不会。正如我在我的文章中写道的,MS也不在它的PresentationOptions实现中:Freeze(如果将值设置为true)。我的问题是,如果它有一些缺陷,但可能我的问题是不确定的。无论如何感谢您的答案。 – HCL 2010-07-21 18:31:14
更新了我的答案,引用了几个可以通过Freeze()防止发生异常(如果有条件地调用CanFreeze)的例外情况。 – andyp 2010-07-21 18:54:49
可以提供可冻结控件的列表吗? – 2012-09-28 18:59:28