2009-04-13 1 views
3

Я использую PropertyGrid для отображения пользовательских свойств, которые отображаются через реализацию ICustomTypeDescriptor.Курсивный текст в PropertyGrid

Мои объекты настроены в древовидной структуре, а значения для каждого свойства либо задаются в каждом объекте, либо унаследованы от родительских объектов. В PropertyGrid я хочу визуально показать пользователю, какие значения свойств заданы в выбранном объекте и которые наследуются от родительских объектов.

Прямо сейчас я показываю каждому свойству две категории. Один набор показывает, какое значение задано в фактическом объекте, с пустым полем, если оно не установлено. В другом наборе отображаются значения свойств, назначенные объекту, которые либо заданы в объекте, либо унаследованы, если они не заданы в объекте.

Я хотел бы объединить эти две группы в одну покупку, показывающую заданные свойства в обычном тексте и унаследованные значения в курсивном тексте. Тем не менее, похоже, нет никакого способа сделать это через ICustomTypeDescriptor.GetProperties(). И у меня нет простого доступа к свойствам PropertyGrid, поскольку они создаются во время работы программы.

ответ

3

Вы не можете делать курсивом - но вы можете сделать жирный шрифт; жирное поведение определяется PropertyDescriptorShouldSerializeValue; вы можете обернуть PropertyDescriptor с помощью различных System.ComponentModel трюков (ICustomTypeDescriptor, TypeConverter или TypeDescriptionProvider) и предоставить свои собственные PropertyDescriptor.

В качестве альтернативы существуют аналогичные сетки с большим количеством опций, например by VisualHint - см. «Настройка свойств» на этой странице.

+0

Итак, если PropertyDescriptor возвращает true для ShouldSerialize(), свойство будет выделено жирным шрифтом? Это не истинное намерение этого метода? Если я уже сериализую эти объекты с помощью DataContractSerializer, то возится с этим методом, рискует изменить способ, которым мои объекты также сериализуются? –

+0

Это зависит ... XmlSerializer (но не, AFAIL, DataContractSerializer) распознает шаблон по имени, но не использует PropertyDescriptor. Если вы используете дескрипторы времени выполнения (а не public 'bool ShouldSerialize *()", тогда вам все будет в порядке. Но до вас ... –

 Смежные вопросы

  • Нет связанных вопросов^_^