一、新建一個導航欄
拖入一個panel到窗口上做為導航欄的容器,然后再拖入一個NavBarControl到其上,點擊NavBarControl控件的右上角三角箭頭展開任務列表,選擇PaintStyle模式為Navigationpane,也就是同時最大展開的分組數目為1。

二、手動為導航欄添加數據
點擊控件右上角三角箭頭展開任務列表,選擇Run Designer打開設計界面。

設計界面的Main -> Groups/Items/Links為導航欄的分組及子項目編輯界面,我們進入此界面,在右側的NavBar Groups窗口內點擊鼠標焦點至此窗口時,上方的添加按鈕可以添加新的分組,在右側的NavBar Items窗口內點擊鼠標焦點至此窗口時,上方的添加按鈕可以添加新的子項目,選中每個分組或子項目可以在右側的屬性窗口快捷設置他的常用屬性,添加好了多個分組和子項目時,需要將子項目指定到某一分組內,直接用鼠標拖動NavBar Items中的子項目到NavBar Groups中的該分組下。

我們創建好了多個分組和子項目后,直接點擊運行,查看此時的效果。

三、捕獲導航欄的基本事件
捕獲導航欄子項目的鼠標點擊事件LinkClicked:
- public Form1()
- {
- InitializeComponent();
- OtherInit();
- }
- /// <summary>
- /// 其他的初始化處理
- /// </summary>
- private void OtherInit()
- {
- navBarItem1.LinkClicked += Item_Click;
- navBarItem2.LinkClicked += Item_Click;
- navBarItem3.LinkClicked += Item_Click;
- navBarItem4.LinkClicked += Item_Click;
- navBarItem5.LinkClicked += Item_Click;
- navBarItem6.LinkClicked += Item_Click;
- navBarItem7.LinkClicked += Item_Click;
- navBarItem8.LinkClicked += Item_Click;
- navBarItem9.LinkClicked += Item_Click;
- }
- /// <summary>
- /// 導航欄子項目的點擊事件
- /// </summary>
- private void Item_Click(object sender, NavBarLinkEventArgs e)
- {
- MessageBox.Show("點擊了子項目:" + e.Link.Caption);
- }

四、動態更改導航欄數據
只需要根據數據動態的創建分組和子項目,並將子項目添加到分組之下:
- NavBarGroup nbGroup1 = new NavBarGroup();
- nbGroup1.Name = "nbGroup1";
- nbGroup1.Caption = "動態添加的分組";
- nbGroup1.SmallImageIndex = -1;
- nbGroup1.LargeImageIndex = -1;
- //添加到導航欄所有分組集合
- navBarControl1.Groups.Add(nbGroup1);
- NavBarItem nbItem1 = new NavBarItem();
- nbItem1.Name = "nbItem1";
- nbItem1.Caption = "動態添加的子項目";
- nbItem1.SmallImageIndex = -1;
- nbItem1.LargeImageIndex = -1;
- nbItem1.LinkClicked += Item_Click;
- //添加到導航欄所有子項目集合
- navBarControl1.Items.Add(nbItem1);
- //添加子項目至某一分組
- nbGroup1.ItemLinks.AddRange(new NavBarItemLink[] {
- new NavBarItemLink(nbItem1)
- });

點擊左側加載控件
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Linq; using System.Threading.Tasks; using System.Windows.Forms; using DevExpress.XtraEditors; using DevExpress.XtraTab; using DevExpress.XtraTab.ViewInfo; namespace Demo { public partial class XtraForm : DevExpress.XtraBars.Ribbon.RibbonForm { public XtraForm() { InitializeComponent(); ((IXtraTab)xtraTabControl1).ViewInfo.HeaderButtonClick += (s, e) => { //關閉所有page if (e.Button == TabButtons.Close) xtraTabControl1.TabPages.ToList().ForEach(x => { x.Dispose(); x = null; }); }; xtraTabControl1.CloseButtonClick += (s, e) => { //關閉單個page var args = (ClosePageButtonEventArgs)e; var page = args.Page as XtraTabPage; if (page != null) { page.Dispose(); page = null; } xtraTabControl1.SelectedTabPageIndex -= xtraTabControl1.TabPages.Count; }; navBarControl1.LinkClicked += (s, e) => { //創建page CreatePage(e.Link.Item.Caption, e.Link.Item.Tag); }; } private void CreatePage(string caption, object tag) { if (string.IsNullOrWhiteSpace(caption) || tag == null || string.IsNullOrWhiteSpace(tag.ToString())) return; foreach (XtraTabPage pg in xtraTabControl1.TabPages) { if (pg.Text.Contains(caption.Trim())) { xtraTabControl1.SelectedTabPage = pg; return; } } var tabpage = new XtraTabPage() { Text = caption.Trim(), Padding = new Padding(5, 5, 5, 5) }; try { var control = Activator.CreateInstance(Type.GetType(tag.ToString().Trim(), false, false)) as UserControl; if (control != null) { control.Visible = true; control.Dock = DockStyle.Fill; tabpage.Controls.Add(control); tabpage.PageVisible = true; xtraTabControl1.TabPages.Add(tabpage); xtraTabControl1.SelectedTabPage = tabpage; } } catch { throw; } } //void navBarControl_ActiveGroupChanged(object sender, DevExpress.XtraNavBar.NavBarGroupEventArgs e) //{ // navigationFrame.SelectedPageIndex = navBarControl1.Groups.IndexOf(e.Group); //} void barButtonNavigation_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e) { int barItemIndex = barSubItemNavigation.ItemLinks.IndexOf(e.Link); navBarControl1.ActiveGroup = navBarControl1.Groups[barItemIndex]; } private void barButtonItem1_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e) { //打開文件 userControl11.UpLoadExcel(); } } }
2:在navBarItem1
屬性中

就可以把自定義控件加到tabcontrol里了.
