private double EnforceHardMaximumAndMinimum(double size)
        {
            SceneNodePropertyValue nodePropertyValue = this.DataContext as SceneNodePropertyValue;

            if (nodePropertyValue != null)
            {
                SceneNodeProperty sceneNodeProperty = nodePropertyValue.get_ParentProperty() as SceneNodeProperty;
                if (sceneNodeProperty != null && sceneNodeProperty.ValueEditorParameters != null)
                {
                    NumberRangesAttribute numberRangesAttribute = sceneNodeProperty.ValueEditorParameters["NumberRanges"] as NumberRangesAttribute;
                    if (numberRangesAttribute != null)
                    {
                        if (numberRangesAttribute.get_HardMaximum().HasValue&& numberRangesAttribute.get_HardMaximum().HasValue)
                        {
                            size = Math.Min(numberRangesAttribute.get_HardMaximum().Value, size);
                        }
                        if (numberRangesAttribute.get_HardMinimum().HasValue&& numberRangesAttribute.get_HardMinimum().HasValue)
                        {
                            size = Math.Max(numberRangesAttribute.get_HardMinimum().Value, size);
                        }
                    }
                }
            }
            return(size);
        }
        public static void OverrideValueEditorParameters(PropertyReferenceProperty baseProperty, PropertyReferenceProperty derivedProperty, string key)
        {
            SceneNodeProperty sceneNodeProperty = baseProperty as SceneNodeProperty;

            if (derivedProperty == null || sceneNodeProperty == null)
            {
                return;
            }
            ValueEditorParameters newParams = new ValueEditorParameters(sceneNodeProperty.Attributes, key);

            if (!(newParams["NumberRanges"] is NumberRangesAttribute))
            {
                NumberRangesAttribute numberRangesAttribute = derivedProperty.Attributes[typeof(NumberRangesAttribute)] as NumberRangesAttribute ?? new NumberRangesAttribute(new double?(), new double?(), new double?(), new double?(), new bool?(false));
                List <Attribute>      list = new List <Attribute>();
                foreach (object obj in sceneNodeProperty.Attributes)
                {
                    list.Add((Attribute)obj);
                }
                list.Add((Attribute)numberRangesAttribute);
                newParams = new ValueEditorParameters(new AttributeCollection(list.ToArray()), key);
            }
            derivedProperty.OverrideValueEditorParameters(newParams);
        }