問題描述
我希望使用 ASP.NET 菜單控件來瀏覽我的網(wǎng)站.但是,我要求每個 MenuItem 必須具有不同的樣式(不同的顏色,靜態(tài)和 onHover).如果不創(chuàng)建將從 MenuItem 繼承的自定義類,這可能嗎?
I'm hoping to use an ASP.NET Menu Control for navigation through my site. However, I've got a requirement that each MenuItem must be styled differently (different colors, both static, and onHover). Without creating a custom class that would inherit from MenuItem, is this possible?
有更好的解決方案嗎?
推薦答案
缺少覆蓋菜單上的 RenderContents,您的選擇非常有限.您需要的大部分內(nèi)容都是私密且密封的,您將無處可去.
Short of overriding RenderContents on Menu, your options are very limited. Most of what you'd need is private and sealed and you won't get anywhere there.
我的解決方案是使用模板.您可以使用 MenuItem.Value 或 Depth and ItemIndex 來標(biāo)識每個項(xiàng)目并提供必要的屬性.
My solution would be to use templates. You could use MenuItem.Value or Depth and and ItemIndex to identify each item and provide necessary attributes.
在頁面中:
<asp:Menu ID="menu" runat="server" DynamicHorizontalOffset="2" StaticSubMenuIndent="10px">
<Items>
<asp:MenuItem Text="Item 1" Value="value 1">
<asp:MenuItem Text="Item 2" Value="value 2">
<asp:MenuItem Text="Item 3" Value="value 3"></asp:MenuItem>
</asp:MenuItem>
<asp:MenuItem Text="Item 4" Value="value 4">
<asp:MenuItem Text="Item 5" Value="value 5"></asp:MenuItem>
</asp:MenuItem>
<asp:MenuItem Text="Item 6" Value="value 6"></asp:MenuItem>
</asp:MenuItem>
<asp:MenuItem Text="Item 7" Value="value 7"></asp:MenuItem>
<asp:MenuItem Text="Item 8" Value="value 8"></asp:MenuItem>
</Items>
<StaticItemTemplate>
<asp:Panel runat="server" ForeColor='<%# GetItemColor(Container) %>'>
<%# Eval("Text") %> - <%# Eval("Value") %>
</asp:Panel>
</StaticItemTemplate>
<DynamicItemTemplate>
<asp:Panel ID="Panel1" runat="server" ForeColor='<%# GetItemColor(Container) %>'>
<%# Eval("Text") %> - <%# Eval("Value") %>
</asp:Panel>
</DynamicItemTemplate>
</asp:Menu>
在代碼中(不要介意這段代碼的愚蠢,只是為了演示原理):
In Code (never mind silliness of this code, it is just to demonstrate the principle):
public Color GetItemColor(MenuItemTemplateContainer container)
{
MenuItem item = (MenuItem)container.DataItem;
//identify based value
if (item.Value == "value 2")
return Color.Brown;
//identify based on depth and index
if (item.Depth == 0)
switch (container.ItemIndex)
{
case 0: return Color.Red;
case 1: return Color.Blue;
case 2: return Color.DarkGreen;
default:
return Color.Black;
}
else
switch (container.ItemIndex)
{
case 0: return Color.Purple;
case 1: return Color.Aqua;
case 2: return Color.DarkOrange;
default:
return Color.Black;
}
}
這篇關(guān)于ASP.NET MenuItem 個人樣式的文章就介紹到這了,希望我們推薦的答案對大家有所幫助,也希望大家多多支持html5模板網(wǎng)!