Скрыть свойство в PropertyGrid, не затрагивая Visual Studio Live Property - PullRequest
1 голос
/ 21 июня 2019

При применении атрибута [Browsable(false)] к свойству PropertyGrid wpftookit больше не перечисляет это свойство (и это моя цель).

Однако инструмент Visual Studio«Live Property Editor» также перестает отображать это свойство.Это не моя цель и снижает возможности отладки.

Конечно, я мог бы работать с такими условиями компилятора, как:

#if DEBUG
[Browsable(false)]
#endif DEBUG

Но это заставляет свойство снова появляться в PropertyGrid при работе с отладочной сборкой(что я обычно делаю во время разработки).

Есть ли способ сохранить свойство видимым в «Редакторе свойств в реальном времени», но удалить его из PropertyGrid?

1 Ответ

0 голосов
/ 28 июня 2019

Вы можете сделать это во время выполнения, используя TypeDescriptors и TypeConvertors, определив, находитесь ли вы в Visual Studio или работаете как ваша программа.

Существует другой ответ о переполнении стека: C # PropertyGrid => Как сделатьизменить видимые свойства во время выполнения , которые могут давать некоторые указатели.

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

Как вы уже обнаружили, то, что контролирует, является ли свойство видимым или нет, является атрибутом BrowsableAttribute.Таким образом, в основном вам нужно динамически изменить этот атрибут, и способ сделать это - создать собственный TypeProvider и TypeDescriptor для вашего класса, который динамически возвращает атрибут Browsable (false) или Browsable (true) для свойства, которое будет скрыто / показанов зависимости от значения другого свойства в классе.Я не буду пытаться описать, как TypeProvider и TypeDescriptor работают здесь, так как это довольно длинная тема, и в Интернете уже доступно много информации по этой теме.

Кроме того, вам нужно указать [RefreshProperties(RefreshProperties.All)] атрибута свойства, управляющего тем, должно ли другое свойство быть видимым или нет.Это заставит таблицу свойств запрашивать TypeDescriptor для списка свойств при каждом изменении его значения, давая вашему TypeDescriptor возможность вернуть другой набор свойств или другие атрибуты возвращаемых им свойств.

...