2008-10-14 11 views
13

Cómo puedo configurar una imagen para que provenga de un directorio de temas (mi tema cambia, así que no quiero hacer referencia directa) Estoy seguro de que esto es posible, pero cada ejemplo que encuentro no parece trabajo. Son por lo general a lo largo de las líneas de:Imágenes de temas de ASP.NET

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

donde Web sería un subdirectorio en mi carpeta de temas. Sugerir el directorio de temas se agregaría en tiempo de ejecución.

Respuesta

19

Si quiere hacer referencia a una Imagen en su carpeta de Temas, le sugiero que use un SkinId. Dentro del archivo de la piel de cada carpeta del tema debe definir algo como esto

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

Cuando vaya a utilizar la imagen en su código que hace algo como esto ...

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

Dependiendo del tema su aplicación lo ha elegido, recogerá la imagen correcta de la carpeta de temas correcta.

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

Aquí es una good article que explica cómo utilizar temas, pieles, y para establecer el tema de varias maneras diferentes.

0

No estoy seguro si he entendido su pregunta correcta, pero si usted tiene una imagen en un archivo de la piel, tales como las siguientes, que vendrá por defecto de la carpeta del tema:

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

Si lo desea venir de una web subcarpeta de la carpeta de temas, utilice una ruta relativa:

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

Su ejemplo se especifica una subcarpeta del directorio raíz de la aplicación:

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

Ver the MSDN page on themes and skins.

2

¿Alguien más tiene idea de esta pregunta?

Otra opción es ampliar la página base. Agregué una función que devolverá la ruta de una imagen basada en el tema actual.

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

Tiene que haber una manera más fácil ¿verdad? Por ejemplo, si quiero crear un control HyperLink y quiero especificar una imagen para él, pero esa imagen está en un tema, ¿cómo lo hago? Quiero que el tema de toda la aplicación se controle desde web.config (por ejemplo, <page theme="MyTheme">), no quiero tener que especificar un tema para cada elemento de mi sitio.

editar: He respondido a mi propia pregunta.Creo en un archivo de la piel, este control:

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

Luego, en mi código simplemente hacer esto:

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