public static DependencyPropertyReferenceStep GetReferenceStep(ITypeResolver typeResolver, Type targetType, object dependencyProperty, Type declaringType, string propertyName, Microsoft.Expression.DesignModel.Metadata.MemberType memberTypes)
        {
            if (typeof(IDesignTimePropertyImplementor).IsAssignableFrom(declaringType))
            {
                IPropertyId propertyId = DesignTimeProperties.FromName(propertyName, (Microsoft.Expression.DesignModel.Metadata.PlatformTypes)typeResolver.PlatformMetadata, null);
                return(propertyId as DependencyPropertyReferenceStep);
            }
            Microsoft.Expression.DesignModel.Metadata.PlatformTypes platformMetadata = (Microsoft.Expression.DesignModel.Metadata.PlatformTypes)typeResolver.PlatformMetadata;
            DependencyPropertyReferenceStep property = platformMetadata.GetProperty(typeResolver, targetType, memberTypes, propertyName) as DependencyPropertyReferenceStep;

            if (property != null && property.DependencyProperty == dependencyProperty)
            {
                return(property);
            }
            if (!declaringType.IsAssignableFrom(targetType))
            {
                if (TypeHelper.IsSet(memberTypes, Microsoft.Expression.DesignModel.Metadata.MemberType.AttachedProperty))
                {
                    DependencyPropertyReferenceStep dependencyPropertyReferenceStep = platformMetadata.GetProperty(typeResolver, declaringType, Microsoft.Expression.DesignModel.Metadata.MemberType.AttachedProperty, propertyName) as DependencyPropertyReferenceStep;
                    property = dependencyPropertyReferenceStep;
                    if (dependencyPropertyReferenceStep == null)
                    {
                        goto Label1;
                    }
                    if (property.TargetType.IsAssignableFrom(targetType))
                    {
                        return(property);
                    }
                    else
                    {
                        return(null);
                    }
                }
Label1:
                if (TypeHelper.IsSet(memberTypes, Microsoft.Expression.DesignModel.Metadata.MemberType.DependencyProperty))
                {
                    DependencyPropertyReferenceStep property1 = platformMetadata.GetProperty(typeResolver, declaringType, Microsoft.Expression.DesignModel.Metadata.MemberType.DependencyProperty, propertyName) as DependencyPropertyReferenceStep;
                    property = property1;
                    if (property1 != null)
                    {
                        return(property);
                    }
                }
            }
            return(null);
        }