#asp.net #visual-studio-2010 #styles #custom-server-controls #design-time
#asp.net #visual-studio-2010 #стили #пользовательские элементы управления сервера #время разработки
Вопрос:
Как следует из моего названия, у меня проблема с ошибкой свойства set.
Вот сценарий:
- Я создал простой пользовательский ASP.Элемент управления Net server, который генерирует некоторый текст.
- Я хотел предоставить свойство времени разработки для этого текста, чтобы разработчики могли получить доступ к его стилю из окна свойств.
- Все свойства в окне свойств работают, за исключением свойств с типом
System.Web.UI.WebControls.Style
, который я создал.
Вот мое свойство:
[Bindable(true)]
[Category("Appearance")]
[Description("The style for the header")]
[Localizable(true)]
public Style HeaderTextStyle
{
get
{
Style s = (Style)(ViewState["HeaderTextStyle"] == null ? Styles.defaultHeaderStyle : ViewState["HeaderTextStyle"]);
return s;
}
set
{
ViewState["HeaderTextStyle"] = value;
}
}
О, и Styles.defaultHeaderStyle
это просто свойство из внутреннего класса, которое возвращает новое Style
.
Позвольте мне указать, что зависание / сбой происходит только при изменении свойства, поэтому оно не может быть получено с помощью средства получения.
Я не буду вставлять свой элемент управления визуализацией, потому что ошибка возникает, даже когда я ничего не визуализирую.
Что является причиной этого?
Спасибо.
Комментарии:
1. Что возвращает Styles.defaultHeaderStyle?
2. @rickschott он возвращает стиль.
public static Style defaultHeaderStyle { get { Style result = new Style(); result.Font.Bold = true; return resu< } }
3. Я нашел решение. Я опубликую пояснения.
Ответ №1:
Я нашел ответ на свою проблему.
Видите ли, класс Style — это свойство, имеющее вложенные свойства, и оно называется сложным свойством. Сложным свойствам (свойство, которое имеет подсвойства) требуется пользовательское управление состоянием для использования состояния просмотра. Классу Style требуются атрибуты времени разработки, чтобы обеспечить сохраняемость в тегах элемента управления. Итак, то, что я написал в своем первоначальном сообщении, не будет работать.
Для получения полного объяснения посетите: Пример свойств серверного элемента управления из MSDN
Мне удалось реализовать это на этом примере. Я надеюсь, что это будет полезно другим пользователям.
Комментарии:
1. В таком случае, не могли бы вы, пожалуйста, пометить сообщение как ответ, поскольку кому-то было бы проще посетить этот вопрос, который содержит решение?
2. Хорошо, я сделал. Я не мог до сих пор, потому что stackoverflow продолжал говорить мне, что я должен подождать 24 часа, чтобы пометить мой ответ как ответ.