Я использую PropertyGrid в приложении, которое я пишу, чтобы позволить пользователям просматривать и иногда редактировать экземпляры моих объектов. Иногда у пользователя может быть файл, открытый в режиме чтения-записи, где они могут внести изменения в файл через сетку свойства. В других случаях они могут иметь файл, открытый в режиме только для чтения, и не должны мочь внести любые изменения в объекты через PropetyGrid. Мои классы также имеют динамические свойства, которые возвращаются путем реализации ICustomTypeDescriptor. Который является, почему я действительно хочу использовать в своих интересах созданный в гибкости управления PropertyGrid.
Кажется, нет простого способа установить сетку Свойства на режим только для чтения. Если я отключаю PropertyGrid, это также препятствует тому, чтобы пользователь прокрутил список. Таким образом, я думаю лучший способ сделать, это должно добавить ReadOnlyAttributes к свойствам во времени выполнения. Есть ли некоторый другой путь?
Поскольку вы реализуете ICustomTypeDescriptor
, нет необходимости добавлять какие-либо атрибуты; вы можете просто переопределить IsReadOnly
в дескрипторе PropertyDescriptor
. Я думаю, должно быть довольно просто написать промежуточный тип, который имитирует (через ICustomTypeDescriptor
и TypeConverter
) завернутый тип, но всегда возвращает экземпляры PropertyDesciptor
только для чтения? Дайте мне знать, если вам нужен пример (хотя это не тривиально ).
Вы также можете проверить, есть ли что-то вроде этого .
Я бы посоветовал написать настраиваемый элемент управления, который наследуется от элемента управления propertygrid, и в этом настраиваемом элементе управления иметь логическое значение только для чтения, а затем переопределить некоторые вещи и проверьте, если (только для чтения), то отмените действие