Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Wpf 如何创建自己的Freezable类?_Wpf_Freezable - Fatal编程技术网

Wpf 如何创建自己的Freezable类?

Wpf 如何创建自己的Freezable类?,wpf,freezable,Wpf,Freezable,我试过MSDN,但没有一个从Freezable派生的例子 更新: 是的,在MSDN中有一个动画示例,但它太复杂了。 需要更简单的东西来理解freezable。文档 在备注部分中,您可以找到以下段落: 有关使用和创建自己的可自由化对象的信息,请参见 本概述包含一节创建您自己的Freezable类,其中包含您想要做什么的理论背景。要查找示例,请按照该部分底部的链接进行操作: 有关自定义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

  • 冰芯

对于访问和写入非依赖属性的数据成员,还必须遵守以下规则:

在读取非依赖属性数据成员的任何API的开头,调用ReadPreamble方法

在任何写入非依赖属性数据成员的API的开头,调用WriteStreamble方法。(在API中调用WriteStreamble后,如果还读取非依赖性属性数据成员,则无需再调用ReadPremission。)

在退出写入非依赖属性数据成员的方法之前,调用WritePostscript方法

如果类包含作为DependencyObject对象的非依赖属性数据成员,则每次更改其值时,即使将成员设置为null,也必须调用OnFreezablePropertyChanged方法

检查
你可以找到

@errez你所寻找的一切就在那一页上。此外,该页面上还有一个链接的示例(其他人在回答中已经注意到),这是该样本的实际下载链接。我将就此向您投票,因为这完全回答了问题