Почему свойства IExtenderProvider теряются в конструкторе в приложении окна C#?
Я создал IExtenderProvider (Extender) для Controls.using Extender, я перебираю коллекцию элементов управления и проверяю ее. Это отлично работает, но иногда при изменении некоторых конструкций или при обновлении дизайнера (при удалении некоторых событий из кода) свойства, предоставленные Extender (в моем случае, Validation Order и Group) теряются от дизайнера, а сам элемент управления не добавляется в коллекцию Extender. Таким образом, проверка, выполненная приложением, свернулась (и, конечно же, самим приложением) У меня тоже есть методы AlwaysSerialize и Reset в IExtenderProvider. Но мне ничего не помогло. Пожалуйста, объясните мне, как сделать все элементы управления видимыми для расширителя в любое время.
Спасибо мати
3 ответа
Это иногда случается, когда в Extender есть исключение. Если это произойдет, вам нужно будет отладить ваш расширитель во время разработки. Я должен был сделать это несколько раз сегодня. Проверьте отладку элементов управления времени разработки, она должна помочь вам начать
В других случаях это происходит из-за того, что вы изменили свойства и методы расширителя, а значения "сериализации" больше не подходят.
Следующий ответ определенно опаздывает на ФП, но может помочь другим.
У меня была та же самая проблема: свойства были или потеряны или не показывались вообще. В моем случае проблема заключалась в том, что тип, указанный в методах ProvideProperty, CanExtend и SetXXX и GetXX, был разным. Например, ProvideProperty и CanExtend указали "Control" в качестве типа, но в методах SetXXX и GetXXX в качестве первого параметра был указан "объект".
Итак, как только я убедился, что для каждого типа, указанного в ProvideProperty, у меня были соответствующие GetXXX и SetXXX, все работало как положено.
Может быть, это помогает.
Примечание: после исправления кода мне пришлось перезапустить Visual Studio.
В этой статье Тима Ван Вассенхова под названием " Сгибание генерации кода IExtenderProvider к вашей воле" может быть найдено решение, связанное с вашей проблемой. В нем описывается создание настраиваемого сериализатора для вашей реализации IExtenderProvider, который при этом может облегчить проблему, указанную здесь.
Большая часть релевантной информации из этой статьи была также процитирована в другом ответе здесь о переполнении стека.