Pergunta
Como eu poderia definir uma imagem de vir de um diretório do tema (meu tema mudanças para que eu não quero referência diretamente) Estou certo de que isso é possível, mas todos os exemplos que eu encontrar não parece trabalho. Eles são geralmente ao longo das linhas de:
asp: imagem ID = "Image1" runat = "server" ImageUrl = "~ / Web / Mode1.jpg" /
onde Web seria um sub-diretório na minha pasta de temas. Sugerindo que o diretório do tema seria adicionado em tempo de execução.
Solução
Se você está querendo fazer referência a uma imagem em sua pasta tema, então eu sugerir usando um SkinID. Dentro do arquivo da pele de cada tema pasta você definiria algo como isto
<asp:Image runat="server" SkinId="HomeImage" ImageUrl="Images/HomeImage.gif" />
Quando você vai para usar a imagem em seu código fazer algo assim ...
<asp:Image runat="server" SkinId="HomeImage" />
Dependendo do tema sua aplicação tenha pego ele vai pegar a imagem correta da pasta do tema correto.
MyWebSite
App_Themes
Theme1
Default.skin
Default.css
Images
HomeImage.gif
Theme2
Default.skin
Default.css
Images
HomeImage.gif
Aqui está uma href="http://www.odetocode.com/articles/423.aspx" rel="noreferrer"> artigo de boa explicando como usar temas, peles, e para definir o tema de várias maneiras diferentes.
Outras dicas
Alguém tem uma visão sobre esta questão?
Outra opção é estender a página de base. Eu adicionei uma função que irá retornar o caminho de uma imagem baseada no tema atual.
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") %>'>
Não tenho certeza se eu entendi a sua pergunta certa, mas se você tiver uma imagem em um arquivo de pele, tais como o seguinte, ele virá por padrão a partir da pasta do tema:
<asp:Image runat="server" ImageUrl="filename.ext" />
Se você quer que ele vem de um Web subpasta da pasta do tema, use um caminho relativo:
<asp:Image runat="server" ImageUrl="Web/filename.ext" />
Seu exemplo especifica uma subpasta do diretório raiz do aplicativo:
<asp:image ID="Image1" runat="server" ImageUrl="~/Web/Mode1.jpg"/>
Deve haver uma maneira mais fácil não é? Por exemplo, se eu quiser criar um controle HyperLink, e eu quero especificar uma imagem para ele, mas que a imagem está em um tema, como eu faço isso? Eu quero o tema para todo o aplicativo para ser controlado a partir web.config (por exemplo <page theme="MyTheme">
), eu não quero ter que especificar um tema para cada item no meu site.
edit: eu tenho tipo de respondi minha própria pergunta. I criar em um arquivo de pele, este controle:
<asp:Hyperlink runat="Server" SkinId="HyperlinkOne"
ImageUrl="Images/one.png" Text="One" NavigateUrl="~/PageOne.aspx"/>
Em seguida, no meu código eu simplesmente fazer isso:
HyperLink hl = new HyperLink();
hl.SkinID = "HyperlinkOne";