private static DependencyProperty Register(DependencyPropertyHashKey key, Type propertyType, PropertyMetadata metadata, ValidateValueCallback validateValueCallback, bool isAttached, bool isReadOnly)
{
if (metadata == null)
{
metadata = new PropertyMetadata();
}
if (metadata.DefaultValue == null && propertyType.GetIsValueType())
{
metadata.DefaultValue = Activator.CreateInstance(propertyType);
}
if (metadata.DefaultValue != null && !propertyType.IsInstanceOfType(metadata.DefaultValue))
{
metadata.DefaultValue = ConvertDefaultValue(key, metadata.DefaultValue, propertyType);
}
DependencyProperty property = new DependencyProperty(key, propertyType, metadata, validateValueCallback, isAttached, isReadOnly);
if (!property.IsValidValue(metadata.DefaultValue))
{
throw new Granular.Exception("Default value validation of dependency property \"{0}.{1}\" failed", key.Owner.Name, key.Name);
}
AddRegisteredProperty(key, property);
return(property);
}