Вопрос
Как мне настроить изображение из каталога темы (моя тема меняется, поэтому я не хочу напрямую ссылаться на нее) Я уверен, что это возможно, но каждый пример, который я нахожу, похоже, не работает.Обычно они имеют следующий вид:
asp:image ID="Image1" runat="server" ImageUrl="~/Web/Mode1.jpg" /
где Web будет подкаталогом в моей папке тем.Предполагается, что каталог темы будет добавлен во время выполнения.
Решение
Если вы хотите сослаться на изображение в папке вашей темы, я предлагаю использовать SkinId.Внутри файла скина каждой папки темы вы должны определить что-то вроде этого
<asp:Image runat="server" SkinId="HomeImage" ImageUrl="Images/HomeImage.gif" />
Когда вы собираетесь использовать изображение в своем коде, вы делаете что-то вроде этого...
<asp:Image runat="server" SkinId="HomeImage" />
В зависимости от темы, выбранной вашим приложением, оно подберет правильное изображение из правильной папки Theme.
MyWebSite
App_Themes
Theme1
Default.skin
Default.css
Images
HomeImage.gif
Theme2
Default.skin
Default.css
Images
HomeImage.gif
Вот хорошая статья объясняя, как использовать темы, скины и устанавливать тему несколькими различными способами.
Другие советы
Есть ли у кого-нибудь еще понимание этого вопроса?
Другой вариант — расширить базовую страницу.Я добавил функцию, которая будет возвращать путь к изображению на основе текущей темы.
MyBasePage.vb
Private strThemePath As String = ""
Private strThemedImagePath As String = ""
Public Function ThemedImage(ByVal ImageName As String) As String
Return Me.strThemedImagePath & ImageName
End Function
Private Sub Page_PreInit(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.PreInit
Me.strThemePath = "App_Themes/" & Me.Theme & "/"
Me.strThemedImagePath = Me.strThemePath & "Images/"
End Sub
MyPage.aspx
<img src='<%= Me.ThemedImage("Loading_wait.gif") %>'>
Не уверен, правильно ли я понял ваш вопрос, но если у вас есть изображение в файле скина, например следующее, оно по умолчанию будет взято из папки темы:
<asp:Image runat="server" ImageUrl="filename.ext" />
Если вы хотите, чтобы он находился в подпапке Web папки темы, используйте относительный путь:
<asp:Image runat="server" ImageUrl="Web/filename.ext" />
В вашем примере указана подпапка корневого каталога приложения:
<asp:image ID="Image1" runat="server" ImageUrl="~/Web/Mode1.jpg"/>
Видеть страница MSDN с темами и скинами.
Наверняка должен быть более простой способ?Например, если я хочу создать элемент управления HyperLink и указать для него изображение, но это изображение находится в теме, как мне это сделать?Я хочу, чтобы тема для всего приложения управлялась из web.config (например, <page theme="MyTheme">
), я не хочу указывать тему для каждого элемента на моем сайте.
редактировать:Я вроде как ответил на свой вопрос.Я создаю в файле скина этот элемент управления:
<asp:Hyperlink runat="Server" SkinId="HyperlinkOne"
ImageUrl="Images/one.png" Text="One" NavigateUrl="~/PageOne.aspx"/>
Затем в своем коде я просто делаю это:
HyperLink hl = new HyperLink();
hl.SkinID = "HyperlinkOne";