質問
テーマディレクトリから画像を設定するにはどうすればよいですか(テーマは変更されているため、直接参照したくないため)。それらは通常、次の行に沿っています:
asp:image ID = <!> quot; Image1 <!> quot; runat = <!> quot; server <!> quot; ImageUrl = <!> quot;〜/ Web / Mode1.jpg <!> quot; /
ここで、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
良い記事は、テーマ、スキンの使用方法、設定方法を説明しています。テーマにはいくつかの異なる方法があります。
他のヒント
他の誰かがこの質問について洞察を持っていますか?
もう1つのオプションは、ベースページを拡張することです。現在のテーマに基づいて画像のパスを返す関数を追加しました。
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") %>'>
あなたの質問を正しく理解したかどうかはわかりませんが、次のようなスキンファイルに画像がある場合、デフォルトでテーマフォルダから取得されます。
<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";