14

我如何将图像设置为来自主题目录(我的主题发生了变化,所以我不想直接引用)我确信这是可能的,但我发现的每个示例似乎都不起作用。它们通常是这样的:

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

其中 Web 将是我的主题文件夹中的子目录。建议主题目录将在运行时添加。

4

4 回答 4

19

如果您想在主题文件夹中引用图像,那么我建议使用 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

这是一篇很好的文章,解释了如何使用主题、皮肤以及以几种不同的方式设置主题。

于 2008-10-14T12:52:08.377 回答
2

还有其他人对这个问题有见解吗?

另一种选择是扩展基本页面。我添加了一个函数,它将根据当前主题返回图像的路径。

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") %>'> 
于 2008-10-23T16:46:14.110 回答
0

不确定我是否理解您的问题,但如果您的皮肤文件中有图像,如下所示,它将默认来自主题文件夹:

<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 页面

于 2008-10-14T11:55:01.393 回答
0

肯定有更简单的方法吗?例如,如果我想创建一个 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";
于 2008-12-01T09:10:14.327 回答