2015-11-04 6 views
0

Я пытаюсь использовать PropertyGrid (на самом деле это свойство свойства xring wpf toolgit, но я могу переключиться на стандартные формы PropertyGrid, если это упростит), и объект, который мне нужно показать в сетке, имеет некоторые дочерние объекты, которые мне нужно расширить.PropertyGrid - указать ExpandableObject, если у меня нет контроля над классом

Я узнал, что могу достичь этого, отметив свойства атрибутом «ExpandableObject». Однако в некоторых случаях я не являюсь автором класса (или я, но не хочу загромождать его с помощью GUI-материала), поэтому я не могу добавлять такие атрибуты.

Есть ли другой способ сообщить PropertyGrid, какие свойства следует расширять?

+0

может быть, вы могли бы использовать [Decorator] (https://en.wikipedia.org/wiki/Decorator_pattern), который предоставляет все свойства из украшенный объект, но отмеченный атрибутом "ExpandableObject" –

ответ

0

В таблице свойств Xceed есть событие PreparePropertyItem. Вы можете обработать его и установить e.PropertyItem.IsExpandable. Существует пример обработчика, который делает все не примитивные свойства расширяемые:

private void propertyGrid_PreparePropertyItem(object sender, Xceed.Wpf.Toolkit.PropertyGrid.PropertyItemEventArgs e) 
{ 
    var item = e.Item as Xceed.Wpf.Toolkit.PropertyGrid.PropertyItem; 
    if (item == null) 
     return; 
    if (!item.PropertyType.IsValueType && item.PropertyType != typeof(string)) 
    { 
     e.PropertyItem.IsExpandable = true; 
    } 
}