[原創]FineUI秘密花園(二十五) — 手風琴控件概述


手風琴控件是一個用來展示多個面板的控件,這些面板同時只能展開一項(也可以一項都不展開),和選項卡控件TabStrip有異曲同工之妙。本章將會介紹手風琴控件的基本用法,並結合樹控件來制作站點菜單。

 

手風琴控件的基本用法

通過一個示例來展示手風琴控件的用法,先看下最終效果圖:

image

 

這個手風琴控件由三個面板組成,來看下ASPX標簽定義:

   1:  <ext:Accordion ID="Accordion1" Title="手風琴控件" runat="server" Width="300px" Height="450px"
   2:      EnableFill="true" ShowBorder="True" ActiveIndex="1">
   3:      <Panes>
   4:          <ext:AccordionPane ID="AccordionPane1" runat="server" Title="面板一" IconUrl="../images/16/1.png"
   5:              BodyPadding="2px 5px" ShowBorder="false">
   6:              <Items>
   7:                  <ext:Label ID="Label1" Text="面板一中的文本" runat="server">
   8:                  </ext:Label>
   9:              </Items>
  10:          </ext:AccordionPane>
  11:          // 省略其他面板...
  12:      </Panes>
  13:  </ext:Accordion>

這里有幾個屬性需要注意:

  • EnableFill:子面板是否填充全部空間,否則的所有子面板會堆積在頂部
  • ActiveIndex:默認選中的面板索引

而子面板(AccordionPane)和普通的Panel面板沒有區別,只不過ShowHeader屬性不可用(子面板的標題欄是一定會存在的)。

 

在來看下后台獲取展開面板的代碼:

   1:  protected void Button1_Click(object sender, EventArgs e)
   2:  {
   3:      Alert.ShowInTop(String.Format("當前展開的是第 {0} 個面板", Accordion1.ActiveIndex + 1));
   4:  }

 

手風琴+樹控件

官方示例的左側菜單使用的是樹控件,如下圖所示:

image

 

其前台標簽定義和后台綁定代碼如下所示:

   1:  <ext:Region ID="Region2" Split="true" EnableSplitTip="true" CollapseMode="Mini" Width="200px"
   2:      Margins="0 0 0 0" ShowHeader="true" Title="示例" EnableLargeHeader="false" Icon="Outline"
   3:      EnableCollapse="true" Layout="Fit" Position="Left" runat="server">
   4:  </ext:Region>
   5:  <asp:XmlDataSource ID="XmlDataSource1" runat="server" DataFile="~/menu.xml"></asp:XmlDataSource>

 

   1:  protected void Page_Init(object sender, EventArgs e)
   2:  {
   3:      InitTreeMenu();
   4:  }
   5:   
   6:  private void InitTreeMenu()
   7:  {
   8:      Tree treeMenu = new Tree();
   9:      treeMenu.ID = "treeMenu";
  10:      treeMenu.EnableArrows = true;
  11:      treeMenu.ShowBorder = false;
  12:      treeMenu.ShowHeader = false;
  13:      treeMenu.EnableIcons = false;
  14:      treeMenu.AutoScroll = true;
  15:      Region2.Items.Add(treeMenu);
  16:   
  17:      // 綁定 XML 數據源到樹控件
  18:      treeMenu.DataSource = XmlDataSource1;
  19:      treeMenu.DataBind();
  20:  }

這里涉及的知識點有:

  1. 動態添加樹控件,在Page_Init中進行;
  2. 將樹控件綁定到XML數據源。

 

簡單看下XML文件的內容:

   1:  <?xml version="1.0" encoding="utf-8" ?>
   2:  <Tree>
   3:    <TreeNode Text="配置信息" SingleClickExpand="true">
   4:      <TreeNode Text="發布歷史" NavigateUrl="~/config/release_history.txt">
   5:      </TreeNode>
   6:      <TreeNode Text="版本發布周期" NavigateUrl="~/config/release_time_chart.htm" >
   7:      </TreeNode>
   8:      <TreeNode Text="配置 Web.config" NavigateUrl="~/config/modify_webconfig.htm" >
   9:      </TreeNode>
  10:      <TreeNode Text="內置圖標" NavigateUrl="~/config/icons.htm" >
  11:      </TreeNode>
  12:      <TreeNode Text="安裝工具箱" NavigateUrl="~/config/install_toolbox.htm" >
  13:      </TreeNode>
  14:      <TreeNode Text="IIS6中啟用GZIP壓縮" NavigateUrl="~/config/enable_gzip_iis6.htm" >
  15:      </TreeNode>
  16:      <TreeNode Text="AJAX 屬性列表" NavigateUrl="~/config/ajax.aspx" >
  17:      </TreeNode>
  18:    </TreeNode>
  19:    // 省略其他節點...
  20:  </Tree>

 

后來很多網友希望增加手風琴控件和樹控件的組合菜單,效果如下所示:

image

 

下面看下具體的實現代碼:

   1:  protected void Page_Init(object sender, EventArgs e)
   2:  {
   3:      InitAccordionMenu();
   4:  }
   5:   
   6:  private Accordion InitAccordionMenu()
   7:  {
   8:      Accordion accordionMenu = new Accordion();
   9:      accordionMenu.ID = "accordionMenu";
  10:      accordionMenu.EnableFill = true;
  11:      accordionMenu.ShowBorder = false;
  12:      accordionMenu.ShowHeader = false;
  13:      Region2.Items.Add(accordionMenu);
  14:   
  15:      XmlDocument xmlDoc = XmlDataSource1.GetXmlDocument();
  16:      XmlNodeList xmlNodes = xmlDoc.SelectNodes("/Tree/TreeNode");
  17:      foreach (XmlNode xmlNode in xmlNodes)
  18:      {
  19:          if (xmlNode.HasChildNodes)
  20:          {
  21:              AccordionPane accordionPane = new AccordionPane();
  22:              accordionPane.Title = xmlNode.Attributes["Text"].Value;
  23:              accordionPane.Layout = Layout.Fit;
  24:              accordionPane.ShowBorder = false;
  25:              accordionPane.BodyPadding = "2px 0 0 0";
  26:              accordionMenu.Items.Add(accordionPane);
  27:   
  28:              Tree innerTree = new Tree();
  29:              innerTree.EnableArrows = true;
  30:              innerTree.ShowBorder = false;
  31:              innerTree.ShowHeader = false;
  32:              innerTree.EnableIcons = false;
  33:              innerTree.AutoScroll = true;
  34:              accordionPane.Items.Add(innerTree);
  35:   
  36:              XmlDocument innerXmlDoc = new XmlDocument();
  37:              innerXmlDoc.LoadXml(String.Format("<?xml version=\"1.0\" encoding=\"utf-8\" ?><Tree>{0}</Tree>", xmlNode.InnerXml));
  38:   
  39:              // 綁定AccordionPane內部的樹控件
  40:              innerTree.DataSource = innerXmlDoc;
  41:              innerTree.DataBind();
  42:          }
  43:      }
  44:  }

來分析一下這段代碼的邏輯:

  1. 首先創建一個手風琴控件,並添加到父容器中(Region2.Items.Add);
  2. 從Xml數據源獲取XmlDocument對象;
  3. 選取XmlDocument對象中第一層TreeNode節點集合(其XPath路徑為/Tree/TreeNode);
  4. 遍歷第一層TreeNode節點集合,並生成手風琴控件的子面板(new AccordionPane),注意這些子面板的Layout屬性為Fit;
  5. 向手風琴子面板中加入新創建的樹控件(accordionPane.Items.Add);
  6. 讀取當前Xml節點的內部標簽(xmlNode.InnerXml),並創建新的XmlDocument對象並綁定到樹控件上。

 

通過上面的幾個步驟,我們創建了一個手風琴控件,每個手風琴控件子面板中創建了一個樹控件,從而完成這個任務。

 

小結

本章我們講解了手風琴控件的基本用法,以及如何結合手風琴和樹控件來創建站點菜單。下一篇文章我們會介紹和手風琴控件比較類似的選項卡控件。

 

注:《FineUI秘密花園》系列文章由三生石上原創,博客園首發,轉載請注明出處。文章目錄 官方論壇


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM