CanFreeze何时可以使用?

问题描述:

在冻结对象之前是否需要始终检查CanFreezeCanFreeze何时可以使用?

如果我看PresentationOptions:Freeze用于标记,它没有完成。因此我不认为,必须在everey对象创建之前调用CanFreeze。

但CanFreeze何时可以使用?

你不必调用CanFreeze但如果你不这样做,你的目标是可冻结的InvalidOperationException将被抛出(见冻结的"remarks"部分())。所以CanFreeze是一个选项,允许你调用Freeze()而不会冒任何异常。

有几种情况下,调用Freeze()会导致异常。从Freeze()参考 直接报价:

无法冻结可冻结对象 如果满足下列条件 任何一个是关于对象的真实:

  • 它有动画或数据绑定 性质。

  • 它具有由 动态资源设置的属性。有关动态资源的更多信息,请参阅 资源概述。

  • 它包含无法冻结 的Freezable子对象。

+0

+1是的,但在这种情况下是否有必要?什么时候出现问题?如果我创建一个SolidColorBrush的新实例?可能不会。正如我在我的文章中写道的,MS也不在它的PresentationOptions实现中:Freeze(如果将值设置为true)。我的问题是,如果它有一些缺陷,但可能我的问题是不确定的。无论如何感谢您的答案。 – HCL 2010-07-21 18:31:14

+0

更新了我的答案,引用了几个可以通过Freeze()防止发生异常(如果有条件地调用CanFreeze)的例外情况。 – andyp 2010-07-21 18:54:49

+0

可以提供可冻结控件的列表吗? – 2012-09-28 18:59:28