Wpf 如何创建自己的Freezable类?
我试过MSDN,但没有一个从Freezable派生的例子 更新: 是的,在MSDN中有一个动画示例,但它太复杂了。 需要更简单的东西来理解freezable。文档 在备注部分中,您可以找到以下段落: 有关使用和创建自己的可自由化对象的信息,请参见 本概述包含一节创建您自己的Freezable类,其中包含您想要做什么的理论背景。要查找示例,请按照该部分底部的链接进行操作: 有关自定义Freezable类的示例,请参见Wpf 如何创建自己的Freezable类?,wpf,freezable,Wpf,Freezable,我试过MSDN,但没有一个从Freezable派生的例子 更新: 是的,在MSDN中有一个动画示例,但它太复杂了。 需要更简单的东西来理解freezable。文档 在备注部分中,您可以找到以下段落: 有关使用和创建自己的可自由化对象的信息,请参见 本概述包含一节创建您自己的Freezable类,其中包含您想要做什么的理论背景。要查找示例,请按照该部分底部的链接进行操作: 有关自定义Freezable类的示例,请参见 例子 由于您特别要求提供一个简单的示例,下面是一个(改编自)。记住以下句子:
例子 由于您特别要求提供一个简单的示例,下面是一个(改编自)。记住以下句子: 每个Freezable子类都必须重写CreateInstanceCore方法。如果您的类对其所有数据使用依赖属性,那么您就完成了 假设我们创建了一个自定义类
MySimpleColor
,它正好有一个布尔属性IsRed
。要使此类可自由化,我们只需重写CreateInstanceCore
:
public class MySimpleColor : Freezable
{
// Here are your properties
public static readonly DependencyProperty IsRedProperty =
DependencyProperty.Register("IsRed", typeof(Boolean), typeof(MySimpleColor));
// CLR accessor of your property
public bool IsRed {
get { return (bool)GetValue(IsRedProperty); }
set { SetValue(IsRedProperty, value); }
}
// All that's needed to make this Freezable
protected override Freezable CreateInstanceCore() {
return new MySimpleColor();
}
}
就这样。从Freezable
继承的代码可确保Freezable
方法,如Freeze()
或Clone()
完全按照预期工作。您尝试了什么?
清楚地说明需要从中继承什么
Freezable是DependencyObject的一种类型,因此使用dependency属性系统。您的类属性不必是依赖性属性,但使用依赖性属性将减少您必须编写的代码量,因为Freezable类的设计考虑了依赖性属性。有关依赖项属性系统的详细信息,请参阅依赖项属性概述
每个Freezable子类都必须重写CreateInstanceCore方法。如果您的类对其所有数据使用依赖属性,那么您就完成了
如果类包含非依赖属性数据成员,则还必须重写以下方法:
- CloneCore
- CloneCurrentValueCore
- GetAsFrozenCore
- GetCurrentValueAsFrozenCore
- 冰芯
你可以找到@errez你所寻找的一切就在那一页上。此外,该页面上还有一个链接的示例(其他人在回答中已经注意到),这是该样本的实际下载链接。我将就此向您投票,因为这完全回答了问题