利用 ASP.NET Menu 控制項,可以開發 ASP.NET 網頁的靜態和動態顯示菜單。
Menu 控制項具有兩種顯示模式:靜態模式和動態模式。靜態顯示意味著 Menu 控制項始終是完全展開的。整個結構都是可視的,使用者可以單擊任何部位。在動態顯示的菜單中,只有指定的部分是靜態,而只有使用者將滑鼠指標放置在父節點上時才會顯示其子功能表項。
您可以在 Menu 控制項中直接配置其內容,也可通過將該控制項綁定到資料來源的方式來指定其內容。無需編寫任何代碼,便可控制 ASP.NET Menu 控制項的外觀、方向和內容。除該控制項公開的可視屬性外,該控制項還支援 ASP.NET 控制面板和主題。
靜態顯示行為
使用 Menu 控制項的 StaticDisplayLevels 屬性可控制靜態顯示行為。StaticDisplayLevels 屬性指示從根菜單算起,靜態顯示的菜單的層數。例如,如果將 StaticDisplayLevels 設定為 3,菜單將以靜態顯示的方式展開其前三層。靜態顯示的最小層數為 1,如果將該值設定為 0 或負數,該控制項將會引發異常。
動態顯示行為
MaximumDynamicDisplayLevels 屬性指定在靜態顯示層後應顯示的動態顯示菜單節點層數。例如,如果菜單有 3 個靜態層和 2 個動態層,則菜單的前三層靜態顯示,後兩層動態顯示。
如果將 MaximumDynamicDisplayLevels 設定為 0,則不會動態顯示任何菜單節點。如果將 MaximumDynamicDisplayLevels 設定為負數,則會引發異常。
定義菜單內容
您可以通過兩種方式來定義 Menu 控制項的內容:添加單個 MenuItem 對象(以聲明方式或編程方式);用資料繫結的方法將該控制項綁定到 XML 資料來源。
手動添加功能表項目
您可以通過在 Items 屬性中指定功能表項目的方式向控制項添加單個功能表項目。Items 屬性是 MenuItem 對象的集合。下面的樣本示範 Menu 控制項的聲明性標記,該控制項有三個功能表項目,每個功能表項目有兩個子項:
<asp:Menu ID="Menu1" runat="server" StaticDisplayLevels="3">
<Items>
<asp:MenuItem Text="File" Value="File">
<asp:MenuItem Text="New" Value="New"></asp:MenuItem>
<asp:MenuItem Text="Open" Value="Open"></asp:MenuItem>
</asp:MenuItem>
<asp:MenuItem Text="Edit" Value="Edit">
<asp:MenuItem Text="Copy" Value="Copy"></asp:MenuItem>
<asp:MenuItem Text="Paste" Value="Paste"></asp:MenuItem>
</asp:MenuItem>
<asp:MenuItem Text="View" Value="View">
<asp:MenuItem Text="Normal" Value="Normal"></asp:MenuItem>
<asp:MenuItem Text="Preview" Value="Preview"></asp:MenuItem>
</asp:MenuItem>
</Items>
</asp:Menu>
用資料繫結的方法將控制項綁定到 XML 資料來源
利用這種將控制項綁定到 XML 檔案的方法,可以通過編輯此檔案來控制功能表的內容,而不需要使用設計器。這樣就可以在不重新訪問 Menu 控制項或編輯任何代碼的情況下,更新網站的導航內容。如果網站內容有變化,便可使用 XML 檔案來組織內容,再提供給 Menu 控制項,以確保網站使用者可以訪問這些內容。
外觀和行為
可通過 Menu 控制項的屬性來調整該控制項的行為。此外,您還可以控制動態顯示行為,包括菜單節點持續顯示的時間長度。例如,若要將 Menu 的方向從水平更改為垂直,則可按以下所述來設定 Orientation 屬性:
[C#]
Menu.Orientation = Orientation.Vertical;
將該屬性設定為 Orientation.Horizontal,便可將菜單方向恢複為水平。
可以逐個設定 Menu 控制項的屬性來指定其外觀的大小、顏色、字型和其他特性。此外,還可以對 Menu 控制項套用面板和主題。
樣式
每個菜單層都支援樣式屬性。如果沒有設定動態樣式屬性,則使用靜態樣式屬性。如果設定了動態樣式屬性,而沒有設定靜態樣式屬性,則使用預設的靜態樣式屬性進行呈現。Menu 控制項樣式的階層如下所示:
控制項
SubMenuStyles
MenuItemStyles
SelectedItemStyles
HoverMenuItemStyles
使用下面的邏輯可跨動態和靜態菜單合并這些樣式:
永遠不會合并靜態菜單;如果沒有定義靜態樣式,則應用動態樣式。
動態外觀計時
設計動態菜單時需要注意的一個方面便是菜單動態顯示部分從顯示到消失所需的時間長度。按以下方式調整 DisappearAfter 屬性,可以按毫秒配置此值:
[C#]
Menu.DisappearAfter = 1000;
預設值為 500 毫秒。如果將 DisappearAfter 的值設定為 0,在 Menu 控制項之外暫停便會使其立即消失。將此值設定為 -1 指示暫停時間無限長,只有在 Menu 控制項之外單擊,才會使動態部分消失。
將 Menu 控制項與 UpdatePanel 控制項一起使用
UpdatePanel 控制項用於通過回傳更新頁面的選定地區,而不是更新整個頁面。Menu 控制項可以在 UpdatePanel 控制項內使用,限制條件是必須使用對階層式樣式表 (CSS) 類的引用來應用樣式。例如,使用屬性-CssClass(其中屬性指 Property)屬性 (Attribute) 來設定樣式,而不是使用屬性-子屬性(其中屬性指 Property)屬性 (Attribute) 設定 DynamicHoverStyle 屬性 (Property)。同樣,在使用 DynamicHoverStyle 模板設定樣式時,請使用該模板的 CssClass 屬性 (Attribute)。
下面列出了與 Menu 控制項相關的類
Menu
控制項的主類。
MenuEventArgs
為 Menu 控制項的 MenuItemClick 和 MenuItemDataBound 事件提供資料。
MenuEventHander
表示處理 Menu 控制項的 MenuItemClick 事件或 MenuItemDataBound 事件的方法。
MenuItem
表示一個在 Menu 控制項中顯示的功能表項目。
MenuItemBinding
定義一個資料項目與 Menu 控制項中該資料項目綁定到的功能表項目之間的關係。
MenuItemBindingCollection
表示 MenuItemBinding 對象的集合。
MenuItemCollection
表示 Menu 控制項中功能表項目的集合。
MenuItemStyle
表示 Menu 控制項中功能表項目的樣式。
MenuItemStyleCollection
表示 Menu 控制項中 MenuItemStyle 對象的集合。