Изображения темы ASP.NET

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

asp: image ID = "Image1" runat = "server" ImageUrl = "~/Web/Mode1.jpg" /

где Web будет подкаталогом в папке тем. Предложение каталога темы будет добавлено во время выполнения.

Ответы

Ответ 1

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

<asp:Image runat="server" SkinId="HomeImage" ImageUrl="Images/HomeImage.gif" />

Когда вы идете использовать изображение в своем коде, вы делаете что-то вроде этого...

<asp:Image runat="server" SkinId="HomeImage" />

В зависимости от темы, выбранной вашим приложением, вы получите правильное изображение из правильной папки темы.

MyWebSite
  App_Themes
    Theme1
      Default.skin
      Default.css
      Images
         HomeImage.gif
    Theme2
      Default.skin
      Default.css
      Images
         HomeImage.gif

Вот хорошая статья, объясняющая, как использовать темы, скины и задавать тему несколькими способами.

Ответ 2

У кого-нибудь еще есть понимание этого вопроса?

Другой вариант - расширить базовую страницу. Я добавил функцию, которая вернет путь изображения на основе текущей темы.

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") %>'> 

Ответ 3

Не уверен, правильно ли я понял ваш вопрос, но если у вас есть изображение в файле скина, например, следующее, оно будет появляться по умолчанию из папки темы:

<asp:Image runat="server" ImageUrl="filename.ext" />

Если вы хотите, чтобы он появился в папке подпапки в папке темы, используйте относительный путь:

<asp:Image runat="server" ImageUrl="Web/filename.ext" />

В вашем примере указывается вложенная папка корневого каталога приложения:

<asp:image ID="Image1" runat="server" ImageUrl="~/Web/Mode1.jpg"/> 

Смотрите страницу MSDN по темам и скинам.

Ответ 4

Должен быть более простой способ? Например, если я хочу создать элемент управления HyperLink, и я хочу указать для него изображение, но это изображение в теме, как мне это сделать? Я хочу, чтобы тема для всего приложения контролировалась с помощью web.config(например, <page theme="MyTheme">), я не хочу указывать тему для каждого элемента на моем сайте.

edit: Я ответил на свой вопрос. Я создаю в файле скина этот элемент управления:

<asp:Hyperlink runat="Server" SkinId="HyperlinkOne"
ImageUrl="Images/one.png" Text="One" NavigateUrl="~/PageOne.aspx"/>

Тогда в моем коде я просто делаю это:

HyperLink hl = new HyperLink();
hl.SkinID = "HyperlinkOne";