ASP.NET控件之Menu控件

利用 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 控件樣式的層次結構如下所示:

  1. 控件

  2. SubMenuStyles

  3. MenuItemStyles

  4. SelectedItemStyles

  5. 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 對象的集合。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章