основной файл скина в ASP.NET

В моем проекте есть несколько тем с разными цветами.
Мне нужно скинировать определенные текстовые поля с определенным шрифтом/размером/и т. д. [нет разницы в цвете]
В настоящее время я добавляю <asp:TextBox SkinID="skinned" runat="server".../> ко всем файлам .skin в каждой теме. Есть ли способ разместить этот скин текстового поля в одном месте, например, основной скин?


person eych    schedule 16.10.2009    source источник


Ответы (2)


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

person Christopher Nobles    schedule 16.10.2009
comment
спасибо ... Я изменил свой вопрос для определенных текстовых полей. Тем не менее, вы все равно ответили на мой вопрос... это должно быть указано в каждом файле скина... - person eych; 16.10.2009

Отсутствие наследования или каскадирования в реализации тем ASP.NET — досадное ограничение, которому не уделяется много внимания. В случаях, когда вы хотите, чтобы глобальная тема оформления была доступна для всех тем (без изменения самого определения элемента управления), у вас есть два варианта:

Вариант 1. Используйте VirtualPathProvider

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

Вы можете определить файл Global.skin в специальной теме Global, в которой хранятся общие скины; вы также создадите файл-заполнитель Global.skin для всех других тем:

App_Themes
- Global
  \Global.skin (primary)
- ThemeA 
  \Global.skin (empty placeholder)
- ThemeB
  \Global.skin (empty placeholder)

Затем в VirtualPathProvider вы должны перенаправить все запросы для App_Themes\*\Global.skin на App_Themes\Global\Global.skin.

Вариант 2. Используйте задачу после сборки

Это поправка к вышеуказанному решению, которая позволяет избежать ограничения предварительно скомпилированных веб-сайтов; вместо перенаправления во время выполнения вы можете применить его после сборки с помощью задачи ms-build, которая просто распространяет Global\Global.skin на все остальные папки темы.

Я успешно использовал оба варианта.

person Nariman    schedule 17.10.2009