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() ] %>' />
< FONT>StaticItemTemplate>
< FONT>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...)