2009-11-04 120 views
3

我正在ASP.NET中使用C#代码构建一个自定义asp:菜单控件。它基于我的网站的站点地图。这是菜单的基础:StaticMenuItemStyle与StaticSelectedStyle - 是否覆盖另一个?

<%@ Control language="C#" autoeventwireup="true" codefile="Control.ascs.cs" inherits="menuClass" %> 
<asp:menu id="myMenu" datasourceid="sitemap" runat="server"> 
    <staticmenuitemstyle font-underline="true" /> 
    <staticselectedstyle font-bold="true" font-underline="false" /> 
</asp:menu> 

这应该是很明显的,我想点击的菜单项大胆,而不是下划线,必须强调所有其他项目。问题是每个项目都有下划线,尽管所选项目变得粗体。

一个有趣的测试是交换两个下划线布尔值。结果是所选项目确实加下划线,而所有其他项目未加下划线。这是预期的结果,但考虑到我面临的问题时会感到困惑。

我试图使用cssclass属性来解决这个问题,但无济于事。 谢谢。

+0

有人可以简单地试图重现这至少? – TahoeWolverine 2009-11-09 21:54:05

回答

3

诀窍是使用CssClass,并将CSS仅应用于超链接(“a”elenent),而不应用于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> 

这个问题的根本原因似乎是浏览器如何处理应用到相同的不同的CSS类中定义多个冲突文本的装修风格一个元素,也许还有浏览器如何处理父类的继承,这些父元素也应用了相同的样式。 (ASP.NET的菜单控件在底层使用CSS类来定义“内联”样式,比如font-underline“attribute”,并且它们也在父元素上应用了A元素上的相同样式。查看源代码HTML由我上面的示例或通过您的代码发出,以更好地了解它的工作方式。)

我偶然偶然发现了嵌套的CSS技巧,因为我试图缩小问题的原因。似乎如果您只将CSS应用于A元素,则组合效果会更好。您可以通过实验推断出生成的HTML中的View Source以及选择性地改变应用于每个元素的CSS类样式的基本规则。

你也可以尝试破解CSS规范,了解继承和冲突如何与CSS类一起工作,但我怀疑实验会更容易。 :-)

+0

我喜欢你的答案,尤其是因为它是一个简单的解决方案,但我不明白这与列出样式属性内嵌式有什么不同。你能解释一下这里的区别吗? – TahoeWolverine 2009-11-16 15:33:17

+1

我编辑了一些更详细的答案 - 我不清楚它为什么有效,但希望我指出你在正确的方向来确定管理此行为的基本规则。 – 2009-11-16 19:44:01