请单击以进行评分并提供反馈
MSDN
MSDN Library
.NET 开发
先前版本
Menu 类
全部折叠/全部展开 全部折叠
此页面仅适用于
Microsoft Visual Studio 2005/.NET Framework 2.0

同时提供下列产品的其他版本:
.NET Framework 类库
Menu 类

注意:此类在 .NET Framework 2.0 版中是新增的。

显示 Web 窗体页中的菜单。

命名空间:System.Web.UI.WebControls
程序集:System.Web(在 system.web.dll 中)

Visual Basic(声明)
<ControlValuePropertyAttribute("SelectedValue")> _
Public Class Menu
    Inherits HierarchicalDataBoundControl
    Implements IPostBackEventHandler, INamingContainer
Visual Basic(用法)
Dim instance As Menu
C#
[ControlValuePropertyAttribute("SelectedValue")] 
public class Menu : HierarchicalDataBoundControl, IPostBackEventHandler, INamingContainer
C++
[ControlValuePropertyAttribute(L"SelectedValue")] 
public ref class Menu : public HierarchicalDataBoundControl, IPostBackEventHandler, INamingContainer
J#
/** @attribute ControlValuePropertyAttribute("SelectedValue") */ 
public class Menu extends HierarchicalDataBoundControl implements IPostBackEventHandler, INamingContainer
JScript
ControlValuePropertyAttribute("SelectedValue") 
public class Menu extends HierarchicalDataBoundControl implements IPostBackEventHandler, INamingContainer

Menu 控件用于显示 Web 窗体页中的菜单,并常与用于导航网站的 SiteMapDataSource 控件结合使用。Menu 控件支持下面的功能:

  • 数据绑定,将控件菜单项绑定到分层数据源。

  • 站点导航,通过与 SiteMapDataSource 控件集成实现。

  • Menu 对象模型的编程访问,可动态创建菜单,填充菜单项,设置属性等。

  • 可自定义外观,通过主题、用户定义图像、样式和用户定义模板实现。

用户单击菜单项时,Menu 控件可以导航到所链接的网页或直接回发到服务器。如果设置了菜单项的 NavigateUrl 属性,则 Menu 控件导航到所链接的页;否则,该控件将页回发到服务器进行处理。默认情况下,链接页与 Menu 控件显示在同一窗口或框架中。若要在另一个窗口或框架中显示链接内容,请使用 Menu 控件的 Target 属性。

Note注意

Target 属性影响控件中的所有菜单项。若要为单个菜单项指定一个窗口或框架,请直接设置 MenuItem 对象的 Target 属性。

Menu 控件显示两种类型的菜单:静态菜单和动态菜单。静态菜单始终显示在 Menu 控件中。默认情况下,根级(级别 0)菜单项显示在静态菜单中。通过设置 StaticDisplayLevels 属性,可以在静态菜单中显示更多菜单级别(静态子菜单)。级别高于 StaticDisplayLevels 属性所指定的值的菜单项(如果有)显示在动态菜单中。仅当用户将鼠标指针置于包含动态子菜单的父菜单项上时,才会显示动态菜单。一定的持续时间之后,动态菜单自动消失。使用 DisappearAfter 属性指定持续时间。

Note注意

如果用户在菜单外部单击,动态菜单也会消失。

还可以通过设置 MaximumDynamicDisplayLevels 属性,限制动态菜单的显示级别数。高于指定值的菜单级别则被丢弃。

菜单项

Menu 控件由菜单项(由 MenuItem 对象表示)树组成。顶级(级别 0)菜单项称为根菜单项。具有父菜单项的菜单项称为子菜单项。所有根菜单项都存储在 Items 集合中。子菜单项存储在父菜单项的 ChildItems 集合中。

每个菜单项都具有 Text 属性和 Value 属性。Text 属性的值显示在 Menu 控件中,而 Value 属性则用于存储菜单项的任何其他数据(如传递给与菜单项关联的回发事件的数据)。在单击时,菜单项可导航到 NavigateUrl 属性指示的另一个网页。

Note注意

如果菜单项未设置 NavigateUrl 属性,则单击该菜单项时,Menu 控件只是将页提交给服务器进行处理。

通过设置 ImageUrl 属性,也可选择在菜单项中显示图像。

有关菜单项的更多信息,请参见 MenuItem

静态数据

最简单的 Menu 控件数据模型即是静态菜单项。若要使用声明性语法显示静态菜单项,请首先在 Menu 控件的开始和结束标记之间嵌套开始和结束标记 <Items>。然后,通过在开始和结束标记 <Items> 之间嵌套 <asp:MenuItem> 元素,创建菜单结构。每个 <asp:MenuItem> 元素都表示控件中的一个菜单项,并映射到一个 MenuItem 对象。通过设置菜单项的 <asp:MenuItem> 元素的属性 (Attribute),可以设置其属性 (Property)。若要创建子菜单项,请在父菜单项的开始和结束标记 <asp:MenuItem> 之间嵌套更多 <asp:MenuItem> 元素。

绑定到数据

Menu 控件也可以绑定到数据。可以使用下面两种方法中的一种将 Menu 控件绑定到适当的数据源类型:

  • Menu 控件可以使用任意分层数据源控件,如 XmlDataSource 控件或 SiteMapDataSource 控件。若要绑定到分层数据源控件,请将 Menu 控件的 DataSourceID 属性设置为数据源控件的 ID 值。Menu 控件自动绑定到指定的数据源控件。这是绑定到数据的首选方法。

  • Menu 控件还可以绑定到 XmlDocument 对象。若要绑定到此数据源,请将 Menu 控件的 DataSource 属性设置为该数据源,然后调用 DataBind 方法。

在绑定到数据源时,如果数据源的每个数据项都包含多个属性 (Property)(例如具有多个属性 (Attribute) 的 XML 元素),则菜单项默认显示数据项的 ToString 方法返回的值。对于 XML 元素,菜单项显示其元素名称,这样可显示菜单树的基础结构,但除此之外并无用处。通过使用 DataBindings 集合指定菜单项绑定,可以将菜单项绑定到特定数据项属性。DataBindings 集合包含 MenuItemBinding 对象,这些对象定义数据项和它所绑定到的菜单项之间的关系。可以指定绑定条件和要显示在节点中的数据项属性。有关菜单项绑定的更多信息,请参见 MenuItemBinding

不能通过将 TextTextField 属性设置为空字符串 ("") 在 Menu 控件中创建空节点。将这些属性设置为空字符串相当于未设置这些属性。在这种情况下,Menu 控件将使用 DataSource 属性创建默认绑定。有关更多信息,请参见 网页数据绑定技术

自定义用户界面

可以使用多种方法自定义 Menu 控件的外观。首先,可以通过设置 Orientation 属性,指定是水平还是垂直呈现 Menu 控件。还可以为每个菜单项类型指定不同的样式(如字体大小和颜色等)。下表列出了可用的菜单项样式。

菜单项样式属性

说明

DynamicHoverStyle

动态菜单项在鼠标指针置于其上时的样式设置。

DynamicMenuItemStyle

单个动态菜单项的样式设置。

DynamicMenuStyle

动态菜单的样式设置。

DynamicSelectedStyle

当前所选动态菜单项的样式设置。

StaticHoverStyle

静态菜单项在鼠标指针置于其上时的样式设置。

StaticMenuItemStyle

单个静态菜单项的样式设置。

StaticMenuStyle

静态菜单的样式设置。

StaticSelectedStyle

当前所选静态菜单项的样式设置。

除了设置各样式属性之外,还可以根据菜单项的级别,使用下列样式集合指定应用于菜单项的样式。

级别样式集合

说明

LevelMenuItemStyles

MenuItemStyle 对象的集合,这些对象根据级别控制菜单项的样式。

LevelSelectedStyles

MenuItemStyle 对象的集合,这些对象根据级别控制所选菜单项的样式。

LevelSubMenuStyles

MenuItemStyle 对象的集合,这些对象根据级别控制子菜单项的样式。

集合的第一个样式对应于菜单树第一个深度级别的菜单项的样式。集合的第二个样式对应于菜单树第二个深度级别的菜单项的样式,依此类推。此集合最常用于生成目录风格的导航菜单;在这种导航菜单中,某个深度的菜单项不管是否具有子菜单,都有相同的外观。

Note注意

如果使用上表列出的任何级别样式集合来定义 Menu 控件的样式,这些样式设置都会重写各菜单项的样式属性。

改变控件外观的另一种方法是自定义显示在 Menu 控件中的图像。通过设置下表所示的属性,可以为控件各部分指定自己的自定义图像。

图像属性

说明

DynamicBottomSeparatorImageUrl

显示在动态菜单项底部的可选图像,用于将菜单项与其他菜单项隔开。

DynamicPopOutImageUrl

显示在动态菜单项中的可选图像,用于指示菜单项具有子菜单。

DynamicTopSeparatorImageUrl

显示在动态菜单项顶部的可选图像,用于将菜单项与其他菜单项隔开。

ScrollDownImageUrl

显示在菜单项底部的图像,用于指示用户可以向下滚动查看其他菜单项。

ScrollUpImageUrl

显示在菜单项顶部的图像,用于指示用户可以向上滚动查看其他菜单项。

StaticBottomSeparatorImageUrl

显示在静态菜单项底部的可选图像,用于将菜单项与其他菜单项隔开。

StaticPopOutImageUrl

显示在静态菜单项中的可选图像,用于指示菜单项具有子菜单。

StaticTopSeparatorImageUrl

显示在静态菜单项顶部的可选图像,用于将菜单项与其他菜单项隔开。

若要完全控制用户界面 (UI),可以使用下列模板属性为 Menu 控件定义自己的自定义模板。

模板属性

说明

DynamicItemTemplate

包含动态菜单项的自定义呈现内容的模板。

StaticItemTemplate

包含静态菜单项的自定义呈现内容的模板。

通过设置 DynamicVerticalOffsetDynamicHorizontalOffset 属性,可以控制动态菜单相对于其父菜单项的垂直和水平位置。若要控制静态子菜单在静态菜单中的缩进,请使用 StaticSubMenuIndent 属性。

事件

Menu 控件提供多个可以对其进行编程的事件。因此可以在事件发生时运行自定义例程。下表列出了受支持的事件。

事件

说明

MenuItemClick

单击菜单项时发生。此事件通常用于将页上的一个 Menu 控件与另一个控件进行同步。

MenuItemDataBound

当菜单项绑定到数据时发生。此事件通常用来在菜单项呈现在 Menu 控件中之前对菜单项进行修改。

辅助功能

默认情况下,为此控件呈现的标记可能不符合辅助功能标准,例如 Web 内容辅助功能准则 1.0 (WCAG) 优先级 1 准则。有关此控件的辅助功能支持的详细信息,请参见 ASP.NET 控件和辅助功能

Menu 控件提供 SkipLinkText 属性作为一种可供屏幕阅读器跳过整个控件的方法。如果设置了 SkipLinkText 属性,则会呈现不可见图像的替换文字,使用户可以跳到该控件的结尾。屏幕阅读器读取替换文字,而图像只占用一个像素的空间。若要以像素精度控制页面的呈现,请将 SkipLinkText 属性设置为空字符串 (""),并提供自己的机制以跳过该菜单。SkipLinkText 属性默认被设置为空字符串。

TopicLocation
如何:以编程方式枚举站点地图节点生成 ASP .NET Web 应用程序
如何:以编程方式枚举站点地图节点在 Visual Studio 中生成 ASP .NET Web 应用程序
如何:在不分层的 Web 服务器控件中显示站点地图数据生成 ASP .NET Web 应用程序
如何:在非分层 Web 服务器控件中显示站点地图数据在 Visual Studio 中生成 ASP .NET Web 应用程序
如何:实现 ASP.NET 站点地图提供程序生成 ASP .NET Web 应用程序
如何:实现 ASP.NET 站点地图提供程序在 Visual Studio 中生成 ASP .NET Web 应用程序
如何:添加简单的站点导航生成 ASP .NET Web 应用程序
如何:添加简单的站点导航在 Visual Studio 中生成 ASP .NET Web 应用程序
如何:筛选 SiteMapDataSource Web 服务器控件检索到的节点生成 ASP .NET Web 应用程序
如何:筛选 SiteMapDataSource Web 服务器控件检索到的节点在 Visual Studio 中生成 ASP .NET Web 应用程序
如何:自定义 SiteMapPath Web 服务器控件的外观生成 ASP .NET Web 应用程序
如何:自定义 SiteMapPath Web 服务器控件的外观在 Visual Studio 中生成 ASP .NET Web 应用程序
如何:配置多个站点地图和站点地图提供程序生成 ASP .NET Web 应用程序
如何:配置多个站点地图和站点地图提供程序在 Visual Studio 中生成 ASP .NET Web 应用程序
演练:以编程方式控制 ASP.NET 菜单在 Visual Studio 中构建 ASP .NET Web 应用程序
演练:以编程方式控制 ASP.NET 菜单在 Visual Studio 中生成 ASP .NET Web 应用程序
演练:向网站添加站点导航在 Visual Studio 中构建 ASP .NET Web 应用程序
演练:向网站添加站点导航使用 Visual Web Developer 生成应用程序
演练:在网页上显示菜单在 Visual Studio 中构建 ASP .NET Web 应用程序
演练:在网页上显示菜单使用 Visual Web Developer 生成应用程序

下面的代码示例演示如何使用声明性语法创建具有静态菜单项的 Menu 控件。

Visual Basic
<%@ Page Language="VB" %>

<html>

  <!-- For the hover styles of the Menu control to  -->
  <!-- work correctly, you must include this head   -->
  <!-- element.                                     -->
  <head runat="server">
  </head>

  <body>
    <form runat="server">
    
      <h3>Menu Declarative Example</h3>
    
      <!-- Use declarative syntax to create the   -->
      <!-- menu structure. Submenu items are      -->
      <!-- created by nesting them in parent menu -->
      <!-- items.                                 -->
      <asp:menu id="NavigationMenu"
        disappearafter="2000"
        staticdisplaylevels="2"
        staticsubmenuindent="10" 
        orientation="Vertical"
        font-names="Arial" 
        target="_blank"  
        runat="server">
        
        <staticmenuitemstyle backcolor="LightSteelBlue"
          forecolor="Black"/>
        <statichoverstyle backcolor="LightSkyBlue"/>
        <dynamicmenuitemstyle backcolor="Black"
          forecolor="Silver"/>
        <dynamichoverstyle backcolor="LightSkyBlue"
          forecolor="Black"/>
      
        <items>
          <asp:menuitem navigateurl="Home.aspx" 
            text="Home"
            tooltip="Home">
            <asp:menuitem navigateurl="Music.aspx"
              text="Music"
              tooltip="Music">
              <asp:menuitem navigateurl="Classical.aspx" 
                text="Classical"
                tooltip="Classical"/>
              <asp:menuitem navigateurl="Rock.aspx"
                text="Rock"
                tooltip="Rock"/>
              <asp:menuitem navigateurl="Jazz.aspx"
                text="Jazz"
                tooltip="Jazz"/>
            </asp:menuitem>
            <asp:menuitem navigateurl="Movies.aspx"
              text="Movies"
              tooltip="Movies">
              <asp:menuitem navigateurl="Action.aspx"
                text="Action"
                tooltip="Action"/>
              <asp:menuitem navigateurl="Drama.aspx"
                text="Drama"
                tooltip="Drama"/>
              <asp:menuitem navigateurl="Musical.aspx"
                text="Musical"
                tooltip="Musical"/>
            </asp:menuitem>
          </asp:menuitem>
        </items>
      
      </asp:menu>

    </form>
  </body>
</html>
C#
<%@ Page Language="C#" %>

<html>

  <!-- For the hover styles of the Menu control to  -->
  <!-- work correctly, you must include this head   -->
  <!-- element.                                     -->
  <head runat="server">
  </head>

  <body>
    <form runat="server">
    
      <h3>Menu Declarative Example</h3>
    
      <!-- Use declarative syntax to create the   -->
      <!-- menu structure. Submenu items are      -->
      <!-- created by nesting them in parent menu -->
      <!-- items.                                 -->
      <asp:menu id="NavigationMenu"
        disappearafter="2000"
        staticdisplaylevels="2"
        staticsubmenuindent="10" 
        orientation="Vertical"
        font-names="Arial" 
        target="_blank"  
        runat="server">
        
        <staticmenuitemstyle backcolor="LightSteelBlue"
          forecolor="Black"/>
        <statichoverstyle backcolor="LightSkyBlue"/>
        <dynamicmenuitemstyle backcolor="Black"
          forecolor="Silver"/>
        <dynamichoverstyle backcolor="LightSkyBlue"
          forecolor="Black"/>
      
        <items>
          <asp:menuitem navigateurl="Home.aspx" 
            text="Home"
            tooltip="Home">
            <asp:menuitem navigateurl="Music.aspx"
              text="Music"
              tooltip="Music">
              <asp:menuitem navigateurl="Classical.aspx" 
                text="Classical"
                tooltip="Classical"/>
              <asp:menuitem navigateurl="Rock.aspx"
                text="Rock"
                tooltip="Rock"/>
              <asp:menuitem navigateurl="Jazz.aspx"
                text="Jazz"
                tooltip="Jazz"/>
            </asp:menuitem>
            <asp:menuitem navigateurl="Movies.aspx"
              text="Movies"
              tooltip="Movies">
              <asp:menuitem navigateurl="Action.aspx"
                text="Action"
                tooltip="Action"/>
              <asp:menuitem navigateurl="Drama.aspx"
                text="Drama"
                tooltip="Drama"/>
              <asp:menuitem navigateurl="Musical.aspx"
                text="Musical"
                tooltip="Musical"/>
            </asp:menuitem>
          </asp:menuitem>
        </items>
      
      </asp:menu>

    </form>
  </body>
</html>

下面的代码示例演示如何将 Menu 控件绑定到 SiteMapDataSource 控件。若要此示例正确运行,您必须将下面的示例站点地图数据复制到名为 Web.sitemap 的文件中。

Visual Basic
<%@ Page Language="VB" %>

<html>

  <!-- For the hover styles of the Menu control to  -->
  <!-- work correctly, you must include this head   -->
  <!-- element.                                     -->
  <head runat="server">
  </head>

  <body>
    <form runat="server">
    
      <h3>Menu DataBinding Example</h3>
    
      <!-- Bind the Menu control to a SiteMapDataSource control.  -->
      <asp:menu id="NavigationMenu"
        disappearafter="2000"
        staticdisplaylevels="2"
        staticsubmenuindent="10" 
        orientation="Vertical"
        font-names="Arial" 
        target="_blank"
        datasourceid="MenuSource"   
        runat="server">
        
        <staticmenuitemstyle backcolor="LightSteelBlue"
          forecolor="Black"/>
        <statichoverstyle backcolor="LightSkyBlue"/>
        <dynamicmenuitemstyle backcolor="Black"
          forecolor="Silver"/>
        <dynamichoverstyle backcolor="LightSkyBlue"
          forecolor="Black"/>

      </asp:menu>
      
      <asp:SiteMapDataSource id="MenuSource"
        runat="server"/>        

    </form>
  </body>
</html>
C#
<%@ Page Language="C#" %>

<html>

  <!-- For the hover styles of the Menu control to  -->
  <!-- work correctly, you must include this head   -->
  <!-- element.                                     -->
  <head runat="server">
  </head>

  <body>
    <form runat="server">
    
      <h3>Menu DataBinding Example</h3>
    
      <!-- Bind the Menu control to a SiteMapDataSource control.  -->
      <asp:menu id="NavigationMenu"
        disappearafter="2000"
        staticdisplaylevels="2"
        staticsubmenuindent="10" 
        orientation="Vertical"
        font-names="Arial" 
        target="_blank"
        datasourceid="MenuSource"   
        runat="server">
        
        <staticmenuitemstyle backcolor="LightSteelBlue"
          forecolor="Black"/>
        <statichoverstyle backcolor="LightSkyBlue"/>
        <dynamicmenuitemstyle backcolor="Black"
          forecolor="Silver"/>
        <dynamichoverstyle backcolor="LightSkyBlue"
          forecolor="Black"/>

      </asp:menu>
      
      <asp:SiteMapDataSource id="MenuSource"
        runat="server"/>        

    </form>
  </body>
</html>

下面是上一示例的示例站点地图数据。

<siteMap>

<siteMapNode url="~\Home.aspx"

title="Home"

description="Home">

<siteMapNode url="~\Music.aspx"

title="Music"

description="Music">

<siteMapNode url="~\Classical.aspx"

title="Classical"

description="Classical"/>

<siteMapNode url="~\Rock.aspx"

title="Rock"

description="Rock"/>

<siteMapNode url="~\Jazz.aspx"

title="Jazz"

description="Jazz"/>

</siteMapNode>

<siteMapNode url="~\Movies.aspx"

title="Movies"

description="Movies">

<siteMapNode url="~\Action.aspx"

title="Action"

description="Action"/>

<siteMapNode url="~\Drama.aspx"

title="Drama"

description="Drama"/>

<siteMapNode url="~\Musical.aspx"

title="Musical"

description="Musical"/>

</siteMapNode>

</siteMapNode>

</siteMap>

此类型的任何公共静态(Visual Basic 中的 Shared)成员都是线程安全的,但不保证所有实例成员都是线程安全的。

Windows 98、Windows 2000 SP4、Windows Server 2003、Windows XP Media Center Edition、Windows XP Professional x64 Edition、Windows XP SP2、Windows XP Starter Edition

.NET Framework 并不是对每个平台的所有版本都提供支持。有关受支持版本的列表,请参见系统要求

.NET Framework

受以下版本支持:2.0
社区内容   什么是社区内容?
添加新内容 RSS  批注
Processing
© 2009 Microsoft Corporation 版权所有。 保留所有权利 | 商标 | 隐私权声明
Page view tracker