Menu 控件用于显示 Web 窗体页中的菜单,并常与用于导航网站的 SiteMapDataSource 控件结合使用。Menu 控件支持下面的功能:
-
数据绑定,将控件菜单项绑定到分层数据源。
-
站点导航,通过与 SiteMapDataSource 控件集成实现。
-
对 Menu 对象模型的编程访问,可动态创建菜单,填充菜单项,设置属性等。
-
可自定义外观,通过主题、用户定义图像、样式和用户定义模板实现。
用户单击菜单项时,Menu 控件可以导航到所链接的网页或直接回发到服务器。如果设置了菜单项的 NavigateUrl 属性,则 Menu 控件导航到所链接的页;否则,该控件将页回发到服务器进行处理。默认情况下,链接页与 Menu 控件显示在同一窗口或框架中。若要在另一个窗口或框架中显示链接内容,请使用 Menu 控件的 Target 属性。
注意 |
|---|
| Target 属性影响控件中的所有菜单项。若要为单个菜单项指定一个窗口或框架,请直接设置 MenuItem 对象的 Target 属性。 |
Menu 控件显示两种类型的菜单:静态菜单和动态菜单。静态菜单始终显示在 Menu 控件中。默认情况下,根级(级别 0)菜单项显示在静态菜单中。通过设置 StaticDisplayLevels 属性,可以在静态菜单中显示更多菜单级别(静态子菜单)。级别高于 StaticDisplayLevels 属性所指定的值的菜单项(如果有)显示在动态菜单中。仅当用户将鼠标指针置于包含动态子菜单的父菜单项上时,才会显示动态菜单。一定的持续时间之后,动态菜单自动消失。使用 DisappearAfter 属性指定持续时间。
注意 |
|---|
| 如果用户在菜单外部单击,动态菜单也会消失。 |
还可以通过设置 MaximumDynamicDisplayLevels 属性,限制动态菜单的显示级别数。高于指定值的菜单级别则被丢弃。
菜单项
Menu 控件由菜单项(由 MenuItem 对象表示)树组成。顶级(级别 0)菜单项称为根菜单项。具有父菜单项的菜单项称为子菜单项。所有根菜单项都存储在 Items 集合中。子菜单项存储在父菜单项的 ChildItems 集合中。
每个菜单项都具有 Text 属性和 Value 属性。Text 属性的值显示在 Menu 控件中,而 Value 属性则用于存储菜单项的任何其他数据(如传递给与菜单项关联的回发事件的数据)。在单击时,菜单项可导航到 NavigateUrl 属性指示的另一个网页。
注意 |
|---|
| 如果菜单项未设置 NavigateUrl 属性,则单击该菜单项时,Menu 控件只是将页提交给服务器进行处理。 |
通过设置 ImageUrl 属性,也可选择在菜单项中显示图像。
有关菜单项的更多信息,请参见 MenuItem。
静态数据
最简单的 Menu 控件数据模型即是静态菜单项。若要使用声明性语法显示静态菜单项,请首先在 Menu 控件的开始和结束标记之间嵌套开始和结束标记 <Items>。然后,通过在开始和结束标记 <Items> 之间嵌套 <asp:MenuItem> 元素,创建菜单结构。每个 <asp:MenuItem> 元素都表示控件中的一个菜单项,并映射到一个 MenuItem 对象。通过设置菜单项的 <asp:MenuItem> 元素的属性 (Attribute),可以设置其属性 (Property)。若要创建子菜单项,请在父菜单项的开始和结束标记 <asp:MenuItem> 之间嵌套更多 <asp:MenuItem> 元素。
绑定到数据
Menu 控件也可以绑定到数据。可以使用下面两种方法中的一种将 Menu 控件绑定到适当的数据源类型:
在绑定到数据源时,如果数据源的每个数据项都包含多个属性 (Property)(例如具有多个属性 (Attribute) 的 XML 元素),则菜单项默认显示数据项的 ToString 方法返回的值。对于 XML 元素,菜单项显示其元素名称,这样可显示菜单树的基础结构,但除此之外并无用处。通过使用 DataBindings 集合指定菜单项绑定,可以将菜单项绑定到特定数据项属性。DataBindings 集合包含 MenuItemBinding 对象,这些对象定义数据项和它所绑定到的菜单项之间的关系。可以指定绑定条件和要显示在节点中的数据项属性。有关菜单项绑定的更多信息,请参见 MenuItemBinding。
不能通过将 Text 或 TextField 属性设置为空字符串 ("") 在 Menu 控件中创建空节点。将这些属性设置为空字符串相当于未设置这些属性。在这种情况下,Menu 控件将使用 DataSource 属性创建默认绑定。有关更多信息,请参见 网页数据绑定技术。
自定义用户界面
可以使用多种方法自定义 Menu 控件的外观。首先,可以通过设置 Orientation 属性,指定是水平还是垂直呈现 Menu 控件。还可以为每个菜单项类型指定不同的样式(如字体大小和颜色等)。下表列出了可用的菜单项样式。
除了设置各样式属性之外,还可以根据菜单项的级别,使用下列样式集合指定应用于菜单项的样式。
集合的第一个样式对应于菜单树第一个深度级别的菜单项的样式。集合的第二个样式对应于菜单树第二个深度级别的菜单项的样式,依此类推。此集合最常用于生成目录风格的导航菜单;在这种导航菜单中,某个深度的菜单项不管是否具有子菜单,都有相同的外观。
注意 |
|---|
| 如果使用上表列出的任何级别样式集合来定义 Menu 控件的样式,这些样式设置都会重写各菜单项的样式属性。 |
改变控件外观的另一种方法是自定义显示在 Menu 控件中的图像。通过设置下表所示的属性,可以为控件各部分指定自己的自定义图像。
若要完全控制用户界面 (UI),可以使用下列模板属性为 Menu 控件定义自己的自定义模板。
通过设置 DynamicVerticalOffset 和 DynamicHorizontalOffset 属性,可以控制动态菜单相对于其父菜单项的垂直和水平位置。若要控制静态子菜单在静态菜单中的缩进,请使用 StaticSubMenuIndent 属性。
事件
Menu 控件提供多个可以对其进行编程的事件。因此可以在事件发生时运行自定义例程。下表列出了受支持的事件。
辅助功能
默认情况下,为此控件呈现的标记可能不符合辅助功能标准,例如 Web 内容辅助功能准则 1.0 (WCAG) 优先级 1 准则。有关此控件的辅助功能支持的详细信息,请参见 ASP.NET 控件和辅助功能。
Menu 控件提供 SkipLinkText 属性作为一种可供屏幕阅读器跳过整个控件的方法。如果设置了 SkipLinkText 属性,则会呈现不可见图像的替换文字,使用户可以跳到该控件的结尾。屏幕阅读器读取替换文字,而图像只占用一个像素的空间。若要以像素精度控制页面的呈现,请将 SkipLinkText 属性设置为空字符串 (""),并提供自己的机制以跳过该菜单。SkipLinkText 属性默认被设置为空字符串。