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
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
Os dejo a vosotros terminarlo y dejarlo bonito bonito
Espero que os hay gustado
Me voy a saltar un poco el tutorial para enseñaros un control, tampoco es muy complejo creo que se puede