Napsal bych si na to komponentu MenuHyperLink - vyrenderuje se jako <li><a href="adresa">text</a></li> a pokud je aktuální adresa stejná jako ta, na kterou odkazujeme, přidá se ještě ta CSS třída. Udělejte třídu, která dědí z Control, přidejte jí dvě vlastnosti Text a NavigateUrl (které si ukládají hodnoty do ViewState) a přepište metodu Render. Vlastnosti budou vypadat takto:
[Category("Navigation"), DefaultValue(""), Bindable(true), UrlProperty]
public string NavigateUrl {
get { return (string)(this.ViewState["NavigateUrl"] ?? string.Empty); }
set { this.ViewState["NavigateUrl"] = value; }
}
[Category("Appearance"), DefaultValue(""), Bindable(true), Localizable(true)]
public string Text {
get { return (string)(this.ViewState["Text"] ?? string.Empty); }
set { this.ViewState["Text"] = value; }
}
A metoda Render třeba takto (píšu z hlavy, takže to berte s rezervou):
protected override void Render(HtmlTextWriter writer) {
if (IsActive(NavigateUrl, HttpContext.Current.Request.Url)) {
writer.AddAttributesToRender("class", "active");
}
writer.RenderBeginTag("li"); // <li>
// vyrenderovat hyperlink
writer.AddAttributesToRender("href", Page.ResolveClientUrl(NavigateUrl));
writer.RenderBeginTag("a"); // <a>
writer.WriteEncodedText(Text);
writer.RenderEndTag(); // </a>
writer.RenderEndTag(); // </li>
}
|