/// <summary> /// 依赖属性类,这个类一般来讲是不允许继承的,而且也不能被外界实例化, /// 就只能采用工厂方法进行注册构建。 /// </summary> public class MyDependencyProperty { private Type _propertyType;
public Type PropertyType { get { return _propertyType; } } private Type _ownerType;
public Type OwnerType { get { return _ownerType; } } private string _name; private object _defaultValue; private MyPropertyMetadata _propertyMetadata;
public MyPropertyMetadata PropertyMetadata { get { return _propertyMetadata; } } public object DefaultValue { get { if (_propertyMetadata != null) { return _propertyMetadata.DefaultValue; } return null; } } public string Name { get { return _name; } } //构造函数私有化保证只能由类的静态方法实例化.当然,如果为public也是可以的,这里做只是为了统一构造入口, //便于管理和维护。 private MyDependencyProperty(string name,Type propertyType,Type ownerType,MyPropertyMetadata propertyMetadata) { _propertyType = propertyType; _ownerType = ownerType; _name = name; _propertyMetadata = propertyMetadata;
} //依赖属性实例化工厂方法类. public static MyDependencyProperty Register(string name,MyPropertyMetadata propertyMetadata) { if (propertyMetadata != null && propertyMetadata.DefaultValue.GetType() != propertyType) { throw new Exception(string.Format("the type of defaultValue is not {0}",propertyType.Name)); }
MyDependencyProperty dp = new MyDependencyProperty(name,propertyType,ownerType,propertyMetadata);