我如何将图像设置为来自主题目录(我的主题发生了变化,所以我不想直接引用)我确信这是可能的,但我发现的每个示例似乎都不起作用。它们通常是这样的:
asp:image ID="Image1" runat="server" ImageUrl="~/Web/Mode1.jpg" /
其中 Web 将是我的主题文件夹中的子目录。建议主题目录将在运行时添加。
如果您想在主题文件夹中引用图像,那么我建议使用 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
这是一篇很好的文章,解释了如何使用主题、皮肤以及以几种不同的方式设置主题。
还有其他人对这个问题有见解吗?
另一种选择是扩展基本页面。我添加了一个函数,它将根据当前主题返回图像的路径。
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
我的页面.aspx
<img src='<%= Me.ThemedImage("Loading_wait.gif") %>'>
不确定我是否理解您的问题,但如果您的皮肤文件中有图像,如下所示,它将默认来自主题文件夹:
<asp:Image runat="server" ImageUrl="filename.ext" />
如果您希望它来自主题文件夹的子文件夹 Web,请使用相对路径:
<asp:Image runat="server" ImageUrl="Web/filename.ext" />
您的示例指定了应用程序根目录的子文件夹:
<asp:image ID="Image1" runat="server" ImageUrl="~/Web/Mode1.jpg"/>
请参阅有关主题和皮肤的 MSDN 页面。
肯定有更简单的方法吗?例如,如果我想创建一个 HyperLink 控件,并且我想为其指定一个图像,但该图像在一个主题中,我该怎么做?我希望从 web.config (例如)控制整个应用程序的主题<page theme="MyTheme">
,我不想为我网站中的每个项目指定一个主题。
编辑:我已经回答了我自己的问题。我在皮肤文件中创建了这个控件:
<asp:Hyperlink runat="Server" SkinId="HyperlinkOne"
ImageUrl="Images/one.png" Text="One" NavigateUrl="~/PageOne.aspx"/>
然后在我的代码中我只是这样做:
HyperLink hl = new HyperLink();
hl.SkinID = "HyperlinkOne";