/// <summary>
        /// Creates the control for a property.
        /// </summary>
        /// <param name="property">The property item.</param>
        /// <param name="options">The options.</param>
        /// <returns>
        /// A element.
        /// </returns>
        public virtual FrameworkElement CreateControl(PropertyItem property, PropertyControlFactoryOptions options)
        {
            this.UpdateConverter(property);

            foreach (var editor in this.Editors)
            {
                if (editor.IsAssignable(property.Descriptor.PropertyType))
                {
                    return(this.CreateEditorControl(property, editor));
                }
            }

            if (property.Is(typeof(bool)))
            {
                return(this.CreateBoolControl(property));
            }

            if (property.Is(typeof(Enum)))
            {
                return(this.CreateEnumControl(property, options));
            }

            if (property.Is(typeof(Color)))
            {
                return(this.CreateColorControl(property));
            }

            if (property.Is(typeof(Brush)))
            {
                return(this.CreateBrushControl(property));
            }

            if (property.Is(typeof(FontFamily)) || property.IsFontFamilySelector)
            {
                return(this.CreateFontFamilyControl(property));
            }

            if (property.Is(typeof(ImageSource)) || property.DataTypes.Contains(DataType.ImageUrl))
            {
                return(this.CreateImageControl(property));
            }

            if (property.DataTypes.Contains(DataType.Html))
            {
                return(this.CreateHtmlControl(property));
            }

            if (property.Is(typeof(Uri)))
            {
                return(this.CreateLinkControl(property));
            }

            if (property.ItemsSourceDescriptor != null || property.ItemsSource != null)
            {
                return(this.CreateComboBoxControl(property));
            }

            if (property.Is(typeof(SecureString)))
            {
                return(this.CreateSecurePasswordControl(property));
            }

            if (this.UseDatePicker && property.Is(typeof(DateTime)))
            {
                return(this.CreateDateTimeControl(property));
            }

            if (property.IsFilePath)
            {
                return(this.CreateFilePathControl(property));
            }

            if (property.IsDirectoryPath)
            {
                return(this.CreateDirectoryPathControl(property));
            }

            if (property.PreviewFonts)
            {
                return(this.CreateFontPreview(property));
            }

            if (property.IsComment)
            {
                return(this.CreateCommentControl(property));
            }

            if (property.IsContent)
            {
                return(this.CreateContentControl(property));
            }

            if (property.IsPassword)
            {
                return(this.CreatePasswordControl(property));
            }

            if (property.IsSlidable)
            {
                return(this.CreateSliderControl(property));
            }

            if (property.IsSpinnable)
            {
                return(this.CreateSpinControl(property));
            }

            if (property.CheckableItemsIsCheckedPropertyName != null)
            {
                return(this.CreateCheckableItems(property));
            }

            if (property.Is(typeof(IDictionary)) || property.Is(typeof(IDictionary <,>)))
            {
                return(this.CreateDictionaryControl(property));
            }

            if (property.Is(typeof(ICollection)) || property.Is(typeof(ICollection <>)))
            {
                return(this.CreateGridControl(property));
            }

            return(this.CreateDefaultControl(property));
        }