2008-10-14 6 views
13

Comment définir une image à partir d'un répertoire de thème (mon thème change donc je ne veux pas faire référence directement) Je suis sûr que c'est possible mais chaque exemple que je trouve ne semble pas travail. Ils sont généralement le long des lignes de:Images de thème ASP.NET

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

où Web serait un sous répertoire dans mon dossier de thèmes. Suggérer le répertoire de thème serait ajouté à l'exécution.

Répondre

19

Si vous souhaitez référencer une image dans votre dossier Thème, alors je suggère d'utiliser un SkinId. A l'intérieur du fichier de la peau de chaque dossier thématique vous définiriez quelque chose comme ça

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

Quand vous allez utiliser l'image dans votre code que vous faites quelque chose comme ça ... En fonction du thème

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

votre application a choisi, il ramassera l'image correcte du bon dossier de thème.

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

Voici une good article expliquant comment utiliser les thèmes, les peaux, et de définir le thème de plusieurs façons différentes.

0

Je ne sais pas si je comprends bien votre bonne question, mais si vous avez une image dans un fichier de la peau, comme ce qui suit, il viendra par défaut à partir du dossier thématique:

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

Si vous le voulez provenir d'un site Web sous-dossier du dossier thématique, utilisez un chemin relatif:

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

Votre exemple spécifie un sous-dossier de l'application répertoire racine:

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

Voir the MSDN page on themes and skins.

2

Est-ce que quelqu'un d'autre a un aperçu de cette question?

Une autre option consiste à étendre la page de base. J'ai ajouté une fonction qui va retourner le chemin d'une image basée sur le thème actuel.

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

Il doit y avoir un moyen plus facile sûrement? Par exemple, si je veux créer un contrôle HyperLink, et que je veux spécifier une image pour cela, mais que cette image est dans un thème, comment puis-je le faire? Je veux que le thème de l'application entière soit contrôlé depuis web.config (par exemple <page theme="MyTheme">), je ne veux pas avoir à spécifier un thème pour chaque élément de mon site.

edit: J'ai un peu répondu à ma propre question.Je crée dans un fichier de la peau, ce contrôle:

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

Puis dans mon code je fais simplement ceci:

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