Question
Comment définirais-je qu'une image provienne d'un répertoire de thèmes (mon thème change afin que je ne veuille pas faire directement référence)? Je suis certain que cela est possible, mais chaque exemple que je trouve ne semble pas fonctionner. Ils ressemblent généralement à:
asp: image ID = " Image1 " runat = " serveur " ImageUrl = & Quot; ~ / Web / Mode1.jpg & Quot; /
où Web serait un sous-répertoire de mon dossier de thèmes. La suggestion du répertoire du thème serait ajoutée à l'exécution.
La solution
Si vous souhaitez référencer une image dans votre dossier de thème, je vous suggère d'utiliser un identifiant de peau. Dans le fichier de skin de chaque dossier de thème, vous définissez quelque chose comme ceci
<asp:Image runat="server" SkinId="HomeImage" ImageUrl="Images/HomeImage.gif" />
Quand vous allez utiliser l'image dans votre code, vous faites quelque chose comme ça ...
<asp:Image runat="server" SkinId="HomeImage" />
En fonction du thème choisi par votre application, celle-ci récupérera la bonne image dans le bon dossier de thèmes.
MyWebSite
App_Themes
Theme1
Default.skin
Default.css
Images
HomeImage.gif
Theme2
Default.skin
Default.css
Images
HomeImage.gif
Voici un bon article expliquant comment utiliser des thèmes, des skins et définir le thème de plusieurs manières différentes.
Autres conseils
Quelqu'un d'autre a-t-il un aperçu de cette question?
Une autre option consiste à agrandir la page de base. J'ai ajouté une fonction qui renverra le chemin d'une image en fonction du 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") %>'>
Je ne sais pas si j'ai bien compris votre question, mais si vous avez une image dans un fichier de skin, telle que la suivante, elle viendra par défaut du dossier du thème:
<asp:Image runat="server" ImageUrl="filename.ext" />
Si vous souhaitez qu'il provienne d'un sous-dossier Web du dossier du thème, utilisez un chemin relatif:
<asp:Image runat="server" ImageUrl="Web/filename.ext" />
Votre exemple spécifie un sous-dossier du répertoire racine de l'application:
<asp:image ID="Image1" runat="server" ImageUrl="~/Web/Mode1.jpg"/>
Il doit sûrement y avoir un moyen plus facile? Par exemple, si je veux créer un contrôle HyperLink et que je veux spécifier une image pour celui-ci, mais que cette image est dans un thème, comment puis-je le faire? Je souhaite que le thème de l'ensemble de l'application soit contrôlé à partir de web.config (par exemple, <page theme="MyTheme">
). Je ne souhaite pas avoir à spécifier un thème pour chaque élément de mon site.
modifier: j'ai en quelque sorte répondu à ma propre question. Je crée dans un fichier de skin, ce contrôle:
<asp:Hyperlink runat="Server" SkinId="HyperlinkOne"
ImageUrl="Images/one.png" Text="One" NavigateUrl="~/PageOne.aspx"/>
Ensuite, dans mon code, je fais simplement ceci:
HyperLink hl = new HyperLink();
hl.SkinID = "HyperlinkOne";