Krótki nadrzędnych RenderContents w menu, opcje są bardzo ograniczone. Większość tego, czego potrzebujesz, jest prywatna i zamknięta, a nigdzie się tam nie dostaniesz.
Moim rozwiązaniem byłoby użycie szablonów. Możesz użyć MenuItem.Value lub Depth and i ItemIndex, aby zidentyfikować każdy element i podać niezbędne atrybuty.
na stronie:
<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>
w kodzie (nie szkodzi głupotę tego kodu, to jest po prostu zademonstrować zasadę):
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;
}
}
to działa idealnie dla tego, do czego strzelam. – CodeMonkey1313
Nie widzę, jak to rozwiązuje jego "hover" wymagania kolorystyczne. Podczas gdy panel kontrolny ma właściwość ForeColor, jak pokazałeś, nie ma ona nic podobnego do onmouseover.Jeśli interesują Cię tylko domyślne kolory elementów menu, możesz zrobić coś takiego: –
Buggieboy
@Buggieboy prawdopodobnie stosując tę teorię do ... –
clamchoda