| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Общие вопросы по .NET и C# > Добавление не существующих свойств в PropertyGrid. |
| Автор: Zigl 25.2.2008, 12:04 |
| Постараюсь объяснить что мне нужно. Пишу редактор для игрушки, все свойства объекта отображаются в PropertyGrid. Есть структурка Vector3. Сразу поясню что исходников у меня нету, использую только сборки. Хочу сделать чтобы данные этого вектора отображались как в Visual Studio поле типа Size например, т.е. что-то типа этого Position X: 10, Y: 20, Z: 30 X 10 Y 20 Z 30 Т.е. эта строчка открывается, а там еще три. Но проблема в том что структурка Vector3 не содержит эти свойства, там есть но они левые, а компоненты x,y,z существуют как просто открытые поля. Еще прикол в том, что редактор делается на основе игрового движка(писан мною), в котором есть много различных классов объектов в которых используется Vector3 типа Position, Size и тд. Пока приходится делать так, в редакторе наследую класс через partial (т.е. продолжаю) и в нем перекрываю эти свойства которые возвращают уже мою структурку Vec3, в которой есть эти три свойства X,Y,Z и в нем реализована конвертация (implicit) из Vector3 в Vec3 и обратно. И к свойствам Position применял атрибут Vector3TypeConverter, который преобразовывал значение вектора в строку и обратно, а так как там не было больше других свойств то три свойства X,Y,Z отображались и все было прекрасно. Но получается слишком много одного и тогоже кода. Ковырялся с TypeConverter'ом наследовал класс от ExpandableObjectConverter, реализовывал там преобразование в строку и обратно, чтобы сделать строчку X: 10, Y: 20, Z: 30, потом в перегруженном методе GetProperties создавал новые свойства, такие PropertyDescriptor pd0 = TypeDescriptor.CreateProperty(typeof(Vector3), "X", typeof(float), attributes); PropertyDescriptor pd1 = TypeDescriptor.CreateProperty(typeof(Vector3), "Y", typeof(float), attributes); PropertyDescriptor pd2 = TypeDescriptor.CreateProperty(typeof(Vector3), "Z", typeof(float), attributes); и возвращал их, в PropertyGrid они конечно повлялись, но вместо всяких значений было написанно "не задана ссылка". Вот я и не знаю как связать эти новые свойства с данными вектора. Может можно каким-нибудь образом сувать в PropertyGrid структуру Vec3, хотя на самом деле в свойстве используется Vector3, просто Vec3 сам будет конвертироваться в Vector3. Может кто-нибудь сталкивался. |