2009-09-28 8 views
1

Я создаю настраиваемый составной элемент управления, основанный на управлении asp: Label. Я бы хотел, чтобы свойства по умолчанию для ярлыков были доступны для скинов, а также дополнительные свойства, которые я добавляю к своему элементу управления.Создание составного элемента управления ASP.NET. Как применить свойства, связанные с SkinID?

Но когда я добавляю определение кожи в файл Default.skin в свой каталог тем и добавляю элемент управления на свою страницу с указанным SkinId, я не могу понять, как получить элемент управления для рендеринга с помощью свойств Skinned.

Дополнительные пункты:

  • Мой пользовательский элемент управления определен в отдельной библиотеке/DLL.
  • Я добавил одно тестовое свойство и добавил атрибут [Themeable (false)]. Затем я установил это свойство в файле .skin. Я не получал никаких ошибок при попытке просмотреть страницу, поэтому мне кажется, что файл .skin не применяется, или что элемент управления def в файле скина не совпадает с элементом управления def в aspx страница.

Из файла кожи:

<ctrl:ExtendedLabel SkinId="test" runat="server" 
Expandable="true" Lookup="true" Required="true" 
RequiredCssClass="required" Text="Hello" /> 

От страницы ASPX:

<ctrl:ExtendedLabel SkinID="test" runat="server"/> 

От web.config:

<pages> 
    <controls> 
    <add tagPrefix="ctrl" namespace="MyCompany.WebControls" 
      assembly="MyCompany.Web" /> 
    </controls> 
</pages> 

Я добавил тестовое свойство контроля , пометили его как [Themeable (false)], чтобы проверить, не получится ли ошибка времени выполнения, когда установив это свойство в файл скина. Нет ошибки.

Обратите внимание, что тег страниц не имеет атрибута styleSheetTheme. Однако у меня есть класс базовой страницы, который переопределяет свойство StyleSheetTheme, которое, похоже, работает на все остальное.

Если я добавлю атрибут styleSheetTheme к тегу страниц в web.config, то работает скин, включая получение ошибки, если я попытаюсь установить свойство non-Themeable.

В чем разница? Как я могу заставить его работать с кодом свойства класса базовой страницы?

ответ

2

Что вы получаете, когда пытаетесь это сделать? Я просто создал простой тестовый проект и смог обмениваться пользовательским свойством на веб-пользовательском элементе управления. Моими шагами были:

  • Создать пользовательский контроль.
  • Добавить атрибут classable (true)] в определение класса в файле кода.
  • Добавьте элемент управления Label в свой пользовательский элемент управления.
  • Добавьте свойство под названием «LabelText» в свой пользовательский элемент управления, который получает/устанавливает элементы управления метками. Значение текста.
  • В web.config добавьте 'theme = "TestTheme" в раздел system.web/pages.
  • В web.config добавить '< add tagPrefix = "mine" tagName = "Test" src = "~/UI/Test.ascx" />' в раздел system.web/pages/controls.
  • В моем По умолчанию.skin file, добавлено '< mine: Test runat = "server" LabelText = "Test Text" />
  • В Default.aspx добавлен' < mine: Test id = "test1" runat = "server" /> '

Загрузите страницу вверх и посмотрите текст «Test Text», который присутствовал только в файле Skin.

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

+0

Прогуливаясь по всем вышеперечисленным шагам, я обнаружил, что моя тестовая страница не наследуется от базового класса. Doh! Как неловко. Спасибо за контрольный список Chris – slolife