La principal limitación es que usted suelta todas las potentes funciones de WPF: Data binding
, ControlTemplates
y DataTemplates
, de tamaño infinito, zooms/Rotaciones, Opacity
, Attached Properties
, sólo para nombrar unos pocos. ¡Eso es mucho para rendirse! Tendrá que programar estos controles utilizando las viejas técnicas tediosas y propensas a errores de WinForms, y tratar nuevamente con todas las limitaciones que se liberó de hace años.
DataGridView
NET Framework 3.5 SP1 tiene un DataGrid
que pueden hacer el trabajo, y hay varios de controles de terceros para este como el de Xceed. El uso de una cuadrícula basada en WPF permite el enlace de datos completo, la creación de plantillas y el estilo dentro de la grilla, lo que no sería posible si utiliza DataGridView de WinForms.
PropertyGrid
La razón de WPF no viene con un PropertyGrid
es que es tan fácil de recrear usando WPF lo que ya se le da: Un cuadro de lista sencillo va a hacer, adecuadamente diseñado, con sólo unas pocas líneas de código detrás.
La belleza en el uso de una implementación WPF PropertyGrid
es que puede usar plantillas para presentar las propiedades que está editando, y lo más importante es que puede agregar nuevos editores de propiedades simplemente expresándolos en XAML con algunos enlaces. Por ejemplo, algunas de las propiedades en una de nuestras cuadrículas de propiedad están configuradas con controles deslizantes, y solo fueron cinco líneas de XAML para que eso ocurriera.
Aquí hay un código que ilustran los conceptos clave detrás de la implementación de un PropertyGrid en WPF:
public class PropertyGrid
{
...
public static readonly DependencyProperty SelectedObjectProperty = ...
{
PropertyChangedCallback = (obj, e) =>
{
PropertyItems =
from pi in SelectedObject.GetType().GetProperties()
select new PropertyGridItem { Object = SelectedObject, PropertyInfo = pi };
}
}
}
public class PropertyInfo
{
public object Object;
public PropertyInfo PropertyInfo;
public object Value
{
get { return PropertyInfo.GetValue(Object); }
set { PropertyInfo.SetValue(Object, value); }
}
public string Category
{
get
{
return (
from attrib in PropertyInfo.GetCustomAttributes().OfType<CategoryAttribute>()
select attrib.Name
).FirstOrDefault();
}
}
}
Con esto es muy rápido y fácil de replicar todo el aspecto y la sensación de PropertyGrid
con unas pocas líneas de código XAML: Solo use un ListBox con agrupamiento por categoría, y un ItemTemplate
que consiste en un DockPanel
que contiene un ancho fijo TextBlock
vinculado al nombre de la propiedad y un ContentPresenter
para imprimir el editor de propiedades.
Aunque esbocé el PropertyGrid de fabricación propia que utilizamos, es posible que también desee consultar el de CodePlex que menciona Franci Penov. –