PropertyItem, una triquiñuela para ordenar nombre de campo/valor

Ahí lo llevas, más cómodo que otra cosa.

Si queremos organizar una lista de propiedades y que las etiquetas queden alineadas con un Grid.IsSharedSize, usa el majestuoso PropertyItem, que aunque sea como versa el título de esta entrada, puede ser realmente útil.

public class PropertyItem : ItemsControl
    {
        static PropertyItem()
        {
            DefaultStyleKeyProperty.OverrideMetadata(typeof(PropertyItem), new FrameworkPropertyMetadata(typeof(PropertyItem)));
        }

        public PropertyItem()
        {
            IsVisibleChanged += (sender, args) => SetColumns();
            Loaded += (sender, args) => SetColumns();
        }

        private void SetColumns()
        {

            var column = 0;

            if (Items.Count == 1)
            {
                var container = ContainerFromElement(this, (DependencyObject) Items[0]);
                if (container != null)
                {
                    container.SetValue(Grid.ColumnSpanProperty, 2);
                }
            }
            else
            {
                foreach (DependencyObject item in Items)
                {
                    var container = ContainerFromElement(this, item);
                    if (container != null)
                    {
                        container.SetValue(Grid.ColumnProperty, column);
                    }

                    column = 1;
                }
            }
        }

        protected override DependencyObject GetContainerForItemOverride()
        {
            return new ContentControl();
        }

        protected override bool IsItemItsOwnContainerOverride(object item)
        {
            return item is ContentControl;
        }
    }

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s