2011-01-13 1 views
2

по умолчанию Я использую таблицу свойств для редактирования, среди прочего, набор элементов: alt textИзменить поведение PropertyGrid и TypeConverterAttribute

поведение по умолчанию для коллекции обеспечивает кнопку + для редактирования каждого члена массив.

Я использую форму для редактирования этого поля, которое уже проводное вверх, но я хочу, чтобы удалить возможность для пользователя, чтобы изменить массив, используя «расширитель»

Так что это будет выглядеть следующим образом:

alt text

Update1: сделано ProductIds IList свойство вместо междунар [] теперь делает это:

alt text

-----------------!

UPDATE2: из ProductIds пользовательский класс, например

MyWrappedCollection : IEnumerable<int> 

так теперь выглядит следующим образом:

alt text

Конечно, это все еще показывает [+], но это не расширение ни к чему (т.е. исчезает, когда вы нажимаете его)

ответ

3

атрибут, который определяет, будет ли это свойство может быть расширен или нет это TypeConverter. ExpandableObjectConverter - это встроенный класс, который обеспечивает возможность расширения собственности и просмотра собственного. Я полагаю, что по умолчанию массивы и коллекции используют этот конвертер для отображения того, что в них.

Вы можете написать свой собственный TypeConverter, который не наследуется от ExpandableObjectConverter и устанавливает его как атрибут вашего свойства, чтобы удалить +.

+0

Приветствия. Мой преобразователь типов расширился ExpandableObjectConverter по какой-то причине, когда должен иметь только: TypeConverter. – wal

0

По умолчанию для коллекции используется метод [...]. Может быть, вы можете использовать коллекцию (например, Список) вместо массива.

Кстати, по какой-либо конкретной причине вы используете массивы?

+0

Я сделал ProductIds IList вместо int [], и вы все равно можете его расширять. см. снимок экрана на оригинальном посте. – wal

+0

Извинения за критику, однако ваш ответ действительно не дает большой помощи. YES, появляется [...], но только при нажатии на нее. – wal

0

Вам необходимо реализовать и применить UITypeEdtitor. См How to: Implement a UI Type Editor

Override GetEditStyle вашего UITypeEditor вернуть Modal

+0

У меня уже есть атрибут UITypeEditor, прикрепленный к этому свойству. Редактор переопределяет GetEditStyle, чтобы вернуть Modal (поскольку я использовал его для всплытия формы), однако значки расширения все еще появляются. – wal