devexpress Ribbon Control-如果存在子元素,如何创建菜单和子菜单

时间:2014-02-05 14:18:32

标签: c# devexpress devexpress-windows-ui

这就是我的数据存储在数据库中的方式。

id    parentId      menu                   filename

1     0             Menu1     

2     1             Sub Menu 1.1     

3     0             Menu2     

4     3             Sub Menu2.1    

5     3             Sub Menu2.2  

6     5             My file                D:\a.txt

7     0             Menu 3     

8     7             My file (menu3)        D:\b.txt

我想在Ribbon控件上显示菜单/子菜单/文件名。如果有人做过这样的事情,请建议如何做到这一点。我创建了一个Ribbon Form然后Ribbon控件,添加了Bar Button Item。现在,我想在菜单中显示带有导航箭头的菜单,例如菜单1,菜单2,带有导航箭头的menu3,在悬停时显示子菜单和子菜单,如果其中有任何子元素,则再次显示箭头。

平台:VS2012,Windows应用程序,c#

2 个答案:

答案 0 :(得分:1)

查看The List of Bar Items and Links帮助文章。
根据此文档,您应使用菜单(BarSubItem)项而不是按钮(BarButtonItem)项来表示功能区中的子菜单。

答案 1 :(得分:0)

    private void AddMenu(string menuName, int id, int parentId, string fileName)
    {
        BarSubItem subitem = CreateSubItem(menuName, id, fileName);

        if (parentId != 0)
        {
            BarSubItem parentItem = ribbon.Items.FindById(parentId) as BarSubItem;
            parentItem.LinksPersistInfo.Add(new DevExpress.XtraBars.LinkPersistInfo(subitem));
        }
        else
        {                
            menuBarSubItem.LinksPersistInfo.Add(new DevExpress.XtraBars.LinkPersistInfo(subitem));
        }
    }

    private BarSubItem CreateSubItem(string menuName, int id, string fileName)
    {
        BarSubItem subitem = new BarSubItem(ribbon.Manager, menuName);
        subitem.Id = id;
        if (!string.IsNullOrEmpty(fileName))
            subitem.Glyph = System.Drawing.Image.FromFile("file.png");
        return subitem;
    }

    private void AddMenuItem(string menuName, int id, int parentId, string fileName)
    {
        BarButtonItem buttonItem = new BarButtonItem(ribbon.Manager, menuName);
        buttonItem.Id = id;
        buttonItem.Tag = fileName;
        buttonItem.ItemClick += buttonItem_ItemClick;

        if (!string.IsNullOrEmpty(fileName))
            buttonItem.Glyph = System.Drawing.Image.FromFile("file.png");
        if (parentId != 0)
        {
            BarSubItem parentItem = ribbon.Items.FindById(parentId) as BarSubItem;
            parentItem.LinksPersistInfo.Add(new DevExpress.XtraBars.LinkPersistInfo(buttonItem));
        }
        else
        {
            menuBarSubItem.LinksPersistInfo.Add(new DevExpress.XtraBars.LinkPersistInfo(buttonItem));                
        }
    }