诀窍是使用 CssClass,并将 CSS 仅应用于超链接(“a”元素),而不应用于 ASP.NET 用于显示菜单项的周围 HTML 表。这是一个独立的代码示例,说明了您正在寻找的行为:
<%@ Page Language="C#"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<style type="text/css">
.notSelected a
{
text-decoration:underline;
}
.selected a
{
font-weight:bold;
text-decoration:none;
}
</style>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:menu id="myMenu" runat="server">
<StaticMenuItemStyle CssClass="notSelected" />
<StaticSelectedStyle CssClass="selected" />
<Items>
<asp:MenuItem Text="Test (selected)" Selected="true" NavigateUrl="~/Default.aspx"></asp:MenuItem>
<asp:MenuItem Text="Test (not selected)" NavigateUrl="~/Default.aspx"></asp:MenuItem>
</Items>
</asp:menu>
</div>
</form>
</body>
</html>
这个问题的根本原因似乎是浏览器如何处理在应用于相同 A 元素的不同 CSS 类中定义的多个冲突的文本装饰样式,以及浏览器如何处理从也应用了相同样式的父级的继承。(ASP.NET 的菜单控件在底层使用 CSS 类来定义“内联”样式,如字体下划线“属性”,并且它们在 A 元素上也应用与父元素相同的样式。看看查看源代码 HTML由我上面的示例或您的代码发出,以便更好地了解它的工作原理。)
当我试图缩小问题的原因时,我偶然发现了嵌套 CSS 技巧。似乎如果您仅将 CSS 应用于 A 元素,则组合效果更好。通过对生成的 HTML 进行查看源代码并有选择地改变应用于每个元素的 CSS 类的样式,您可以通过实验推断出基本规则。
您还可以尝试解读 CSS 规范,了解继承和冲突如何与 CSS 类一起使用,但我怀疑实验会更容易。:-)