2009-10-16 3 views
4

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

ответ

0

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

+0

спасибо ... Я изменил свой вопрос на определенные текстовые поля. Тем не менее, вы все еще ответили на мой вопрос ... он должен быть указан в каждом файле скина ... – eych

5

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

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

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

вы можете определить 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: Используйте после сборки Task

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

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

Смежные вопросы