TIP ASP.Net 2.0: personalizzare lo stile dei pulsanti del menu

Luka ha già fornito un ottimo tip per aggiungere attributi personalizzati al web.sitemap. Io estendo la sua feature e la uso per personalizzare il rendering dei singoli pulsanti, andando ad agire sullo style di ognuno di essi.

Prima cosa: definire lo stile e le risorse all'interno del Web.sitemap. Per esempio:

<siteMapNode url="Default.aspx" resourceKey="0" title="HOME" description="Home" style="background: url('[APPLICATIONPATH]/Images/MasterPage/Button_MainMenuA.jpg');" />

<siteMapNode url="WhoWeAre.aspx" resourceKey="1" title="INFO" description="Informazioni sulla associazione" style="background: url('[APPLICATIONPATH]/Images/MasterPage/Button_MainMenuArrow.jpg');" >

Seconda cosa: creare un template all'interno del controllo menu. Ad esempio:

<asp:Menu ID="Menu2" runat="server" OnMenuItemDataBound="Menu1_MenuItemDataBound">

<StaticItemTemplate>

<asp:Label runat="server" Text='<%# Eval("Text") %>'

Style='<%# stile[ Eval("valuepath").ToString() ] %>' />

StaticItemTemplate>

asp:Menu>

 

Terzo e ultimo passaggio: modificare l'evento MenuItemDataBound.

protected static System.Collections.Generic.Dictionary<string, string> stile = new System.Collections.Generic.Dictionary<string, string>();

protected void Menu1_MenuItemDataBound(object sender, MenuEventArgs e)

{

string style= ((SiteMapNode)e.Item.DataItem)["style"];

if (!string.IsNullOrEmpty(style))

{

style = style.Replace("[APPLICATIONPATH]", Request.ApplicationPath);

stile[e.Item.ValuePath] = style;

}

}

Vi faccio notare il piccolo trucco dell'[APPLICATIONPATH]: se utilizzate la MasterPage da una pagina che non risiede nella root avrete problemi con i path relativi delle risorse. In questo modo mi assicuro di partire sempre dalla root nella creazione del link.

Per vedere il risultato finale... www.academiclub.org (la nuova modifica sarà live stasera...)

Print | posted on domenica 11 dicembre 2005 19:12

Comments have been closed on this topic.