В моем проекте есть несколько тем с разными цветами.
Мне нужно скинировать определенные текстовые поля с определенным шрифтом/размером/и т. д. [нет разницы в цвете]
В настоящее время я добавляю <asp:TextBox SkinID="skinned" runat="server".../>
ко всем файлам .skin в каждой теме. Есть ли способ разместить этот скин текстового поля в одном месте, например, основной скин?
основной файл скина в ASP.NET
Ответы (2)
Вам нужно будет перечислить его под каждой темой, но вам нужно указать только одно определение элемента управления для каждой темы. Если вы хотите, чтобы скин был поведением по умолчанию для элемента управления, укажите определение без свойства SkinID.
Отсутствие наследования или каскадирования в реализации тем 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 на все остальные папки темы.
Я успешно использовал оба варианта.