Example #1
0
        /// <summary>
        /// Register a property for a Control.
        /// </summary>
        /// <param name="propertyName"></param>
        /// <param name="propertyType"></param>
        /// <param name="ownerType"></param>
        /// <param name="propertyMetadata"></param>
        /// <returns></returns>
        public static ControlProperty Register(String propertyName, Type propertyType, Type ownerType, ControlPropertyMetadata propertyMetadata = null)
        {
            Assert.EmptyString(propertyName, "propertyName");
            Assert.NullArgument(propertyType, "propertyType");
            Assert.NullArgument(ownerType, "ownerType");

            lock (_lockObject)
            {
                if (!typeof(HtmlObject).IsAssignableFrom(ownerType))
                {
                    throw new Exception(String.Format("The type {0} must inherit from HtmlObject in order to own a ControlProperty", ownerType.FullName));
                }

                var result = new ControlProperty()
                {
                    Name         = propertyName,
                    OwnerType    = ownerType,
                    PropertyType = propertyType,
                    Metadata     = propertyMetadata
                };

                if (result.Metadata != null)
                {
                    result.PropertyChangedCallback = result.Metadata.PropertyChangedCallback;
                    result.Applier    = result.Metadata.Applier;
                    result.IsReadOnly = result.Metadata.ReadOnly;
                    if (result.Metadata.DefaultValue != null)
                    {
                        result.DefaultValue = result.Metadata.DefaultValue;
                    }
                    else
                    {
                        result.DefaultValue = ConversionHelper.Default(propertyType);
                    }
                }

                if (propertyType.GetInterfaces().Contains(typeof(INotifyPropertyChanged)))
                {
                    result.TrackingPropertyChangedEvent = true;
                }

                _properties.Add(result);
                _properties = _properties.OrderBy(p => p.Name).ToList();
                _typePropertiesCache.Clear();
                _templatePropertiesCache.Clear();
                _typePropertiesWithAppliersCache.Clear();
                return(result);
            }
        }
Example #2
0
        /// <summary>
        /// Register a property for a Control.
        /// </summary>
        /// <param name="propertyName"></param>
        /// <param name="propertyType"></param>
        /// <param name="ownerType"></param>
        /// <param name="propertyMetadata"></param>
        /// <returns></returns>
        public static ControlProperty Register(String propertyName, Type propertyType, Type ownerType, ControlPropertyMetadata propertyMetadata = null)
        {
            Assert.EmptyString(propertyName, "propertyName");
            Assert.NullArgument(propertyType, "propertyType");
            Assert.NullArgument(ownerType, "ownerType");

            lock (_lockObject)
            {
                if (!typeof(HtmlObject).IsAssignableFrom(ownerType))
                    throw new Exception(String.Format("The type {0} must inherit from HtmlObject in order to own a ControlProperty", ownerType.FullName));

                var result = new ControlProperty()
                {
                    Name = propertyName,
                    OwnerType = ownerType,
                    PropertyType = propertyType,
                    Metadata = propertyMetadata
                };

                if (result.Metadata != null)
                {
                    result.PropertyChangedCallback = result.Metadata.PropertyChangedCallback;
                    result.Applier = result.Metadata.Applier;
                    result.IsReadOnly = result.Metadata.ReadOnly;
                    if (result.Metadata.DefaultValue != null)
                        result.DefaultValue = result.Metadata.DefaultValue;
                    else
                        result.DefaultValue = ConversionHelper.Default(propertyType);
                }

                if (propertyType.GetInterfaces().Contains(typeof(INotifyPropertyChanged)))
                    result.TrackingPropertyChangedEvent = true;

                _properties.Add(result);
                _properties = _properties.OrderBy(p => p.Name).ToList();
                _typePropertiesCache.Clear();
                _templatePropertiesCache.Clear();
                _typePropertiesWithAppliersCache.Clear();
                return result;
            }
        }