Creación de un Property Grid en WPF Simple y Rapido

Me voy a saltar un poco el tutorial para enseñaros un control, tampoco es muy complejo creo que se puede seguir perfectamente

En una de mis recientes aplicaciones he utilizado el control Property Grid de Denis Vuyka ya que tuve que realizar un diseñador de formularios en WPF, pero ese sera un tema para mas adelante.

Me he planteado realizar uno, no tan profesional como el de Denis, aquí tenéis el planteamiento, la idea es dividir el control en tres partes

image

La búsqueda realizara un filtrado de las propiedades, luego tendremos un StackPanel que contendra el nombre de la propiedad y el valor y por ultimo la descripción de la propiedad seleccionada.

En el control tendremos una propiedad SelectedObject de tipo Object a la cual le pasaremos la instancia del objeto del cual queremos mostrar sus propiedades, una vez pasado un objeto a esta propiedad rellenaremos la lista de propiedades que sera un StackPanel a la que iremos añadiendo items por cada propiedad del objeto

Aquí tenéis el código para sacar la lsita de propiedades

 

                this.PropertyPanel.Children.Clear(); //Limpiar la lista de propiedades 
                
                foreach (PropertyDescriptor property in TypeDescriptor.GetProperties(value))
                {
                    if (!property.IsBrowsable) continue; 
                    PropertyItem currentProperty = new PropertyItem();
                    currentProperty.PropertyName = property.Name;        
                    Binding b = new Binding(property.Name);
                    b.Source = selectedObject;
                    b.Mode = property.IsReadOnly ? BindingMode.OneWay : BindingMode.TwoWay;
                   
                    currentProperty.SetBinding(PropertyItem.PropertyValueProperty, b);
                    currentProperty.OnActive += new EventHandler<DescriptionEventArgs>(currentProperty_OnActive);
                    
                    foreach (Attribute attribute in property.Attributes)
                    {
                        if (attribute.GetType() == typeof(DescriptionAttribute))
                        {
                            currentProperty.PropertyDescription = ((DescriptionAttribute)attribute).Description;
                        }
                       if (attribute.GetType() == typeof(CategoryAttribute)) {
                            currentProperty.PropertyCategory = ((CategoryAttribute)attribute).Category;
                        }
                    }      
                    PropertyPanel.Children.Add(currentProperty); 
                }

El Xaml del control es tan sencillo como el que sigue

 

<HeaderedContentControl x:Class="PropertyGridDemo.PropertyGrid"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:pg="clr-namespace:PropertyGridDemo" Height="146" Width="189">
    <HeaderedContentControl.Resources>
        <ResourceDictionary Source="Themes/Generic.xaml"/>
    </HeaderedContentControl.Resources>
    <HeaderedContentControl.Header>
        <Grid>
            <Grid.ColumnDefinitions>
                <ColumnDefinition Width="50"/>
                <ColumnDefinition Width="*"/>
            </Grid.ColumnDefinitions>
            <TextBlock Text="Buscar:" Grid.Column="0" VerticalAlignment="Center" HorizontalAlignment="Center"/>
            <TextBox x:Name="searchTextBox" Grid.Column="1"/>
        </Grid>
    </HeaderedContentControl.Header>
    <Grid>
        <Grid.RowDefinitions>
            <RowDefinition/>
            <RowDefinition Height="50"/>
        </Grid.RowDefinitions>
        <ScrollViewer x:Name="propertyGridScrollBar" Grid.Row="0" CanContentScroll="False" VerticalScrollBarVisibility="Visible">
            <ScrollViewer.Content>
                <StackPanel x:Name="PropertyPanel"/> 
        </ScrollViewer.Content>
        </ScrollViewer>
        <TextBlock x:Name="descriptionTextBlock" Grid.Row="1" TextWrapping="Wrap"/>
    </Grid>
</HeaderedContentControl>

El resultado es el siguiente pasándole a la propiedad la instancia de un Button

image 

Os dejo a vosotros terminarlo y dejarlo bonito bonito

 

Espero que os hay gustado

 

Un comentario sobre “Creación de un Property Grid en WPF Simple y Rapido”

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *