这种样式类似于Office的Ribbon。不知道Ribbon的,可以自行百度。
相当于Word中的文件菜单,这一区域统称为File,即文件菜单,即使并不作为文件菜单使用。
在不同的Style有不同的风格,简单说,2013,倾向于文件菜单铺满整个左侧。而2010或更早样式,则倾向根据菜单内容自动调整。关于左侧菜单中的文件历史记录。需要通过代码进行记录或者完成,控件本身不给记录此内容。做一个Group,然后插入按钮,大概这样的原理。
如图。左侧XX称为File,ribbon即为ribbon,每个ribbon中均可以自由添加Group,Group内有按钮或其他样式的触发点。
this.ultraToolbarsManager1.Ribbon.Tabs.Clear();//清空Tab页
this.ultraToolbarsManager1.Ribbon.ApplicationMenu2010.NavigationMenu.Tools.Clear();//清除文件菜单
文件菜单使用2010或2013样式时,需要使用ApplicationMenu2010属性方可产生效果。
this.ultraToolbarsManager1.Ribbon.FileMenuButtonCaption = "系统"; 设置文件菜单的名称。
RibbonGroup groupItem = new RibbonGroup(info2.Label); 新建一个Ribbon组
groupItem.Key = "group" + info2.Key;这个新建组需要有一个唯一标识的东西,叫做Key,String类型
this.ultraToolbarsManager1.Ribbon.Tabs[info.Key].Groups.Add(groupItem);添加这个新的组
ButtonTool buttonTool = new ButtonTool(info2.Key);添加一个按钮,同样需要唯一Key。
buttonTool.SharedProps.DisplayStyle = ToolDisplayStyle.Default; 设置部分属性
this.ultraToolbarsManager1.Tools.Add(buttonTool);控件添加这个工具。
这个控件特殊地方在于,当你想给这个分组中添加按钮或控件时。是先统一添加到这个控件中,然后用Key做绑定,并不是直接添加到此按钮上。
比如Toolbars本身有一个RibbonGroup的List,和一个buttonTool的List。每次你添加按钮时,其实是先添加到ultraToolbarsManager1.Tools,Group同理,然后在对应的Group中,利用属性添加这个button,怎么找到对应的Button呢?利用Key
groupItem.Tools.AddTool(buttonTool.Key, false); 在这个Group中,添加这个按钮,Key是不可重复的唯一标志,所以。能对应。
File(文件)菜单中添加按钮需要用如下代码。如果不是2010或2013样式,则使用ApplicationMenu尝试。
this.ultraToolbarsManager1.Ribbon.ApplicationMenu2010.NavigationMenu.Tools.AddTool(buttonTool.Key);
顺序:新建Group或者Button 然后分别绑定(add)到toolbarsManager中,绑定完成后,再做对应的关联关系。
this.ultraToolbarsManager1.Tools.Add(buttonTool);
groupItem.Tools.AddTool(buttonTool.Key, false);
添加关联(绑定)时,控件会从它的Tools中找到对应Key 的按钮然后做关联。所以要先添加后绑定。
设定按钮属性,也有以下方法。
Infragistics.Win.Appearance apperbutton = new Infragistics.Win.Appearance();
buttonTool.SharedProps.Caption = info2.Label;
buttonTool.SharedProps.AppearancesSmall.AppearanceOnRibbonGroup = apperbutton;
buttonTool.SharedProps.AppearancesLarge.AppearanceOnRibbonGroup = apperbutton;
buttonTool.SharedProps.DisplayStyle = ToolDisplayStyle.ImageAndText;
可以利用Appearance进行整体处理。
按钮存在最大最小的情况,而这个控件是分别采用两组属性来对应。所以为AppearancesSmall、和AppearancesLarge
添加Tab页
RibbonTab ribbGroup = new RibbonTab(info.Label);
ribbGroup.Key = info.Key;
this.ultraToolbarsManager1.Ribbon.Tabs.Add(ribbGroup);
Tab中添加分组
this.ultraToolbarsManager1.Ribbon.Tabs[info.Key].Groups.Add(groupItem);
同样利用Key做关联。
以上是用代码动态添加按钮或者组或Tab页。
控件在初始化的时候我做了清空。然后动态处理。
也可以直接在画面写死相关按钮。
当你需要删除ultraToolbarsManager1的按钮时。需要在设计画面,控件上右击Customize,并在里面进行删除按钮。在画面上直接选中按钮利用Delete删除是无效的。
关于
SharedProps和InstanceProps
每个工具都有两个重要的属性,这些属性与其作为“根工具”或“实例工具”的状态有关。它们称为 SharedProps 和 InstanceProps。
每个工具上的SharedProps属性返回SharedProps对象,该对象包含在工具的所有实例之间共享的属性。因此,根工具的SharedProps属性及其所有相关实例工具的SharedProps属性将返回相同的SharedProps对象。SharedProps对象包含诸如外观,标题和类别的属性。
每个工具上的InstanceProps属性返回InstanceProps对象,该对象包含仅影响它们所连接的工具实例的属性。
注意
因为InstanceProps对象仅包含对Instance Tools具有意义的属性,所以Root Tool的InstanceProps属性返回null。 |
InstanceProps对象包含诸如外观,标题和可见性之类的属性。
在SharedProps和InstanceProps对象上,某些属性(如Appearance和Caption)均重复。对于同时出现在SharedProps和InstanceProps上的属性,SharedProps版本用作该属性的“全局”设置,影响所有相关的工具实例,而InstanceProps版本仅影响其所连接的实例。这为开发人员提供了设置此类工具属性的极大灵活性。例如,可以使用其SharedProps.Appearance属性设置工具的外观,这样做会影响该工具的所有实例。如果您随后希望该工具的特定实例以不同的方式显示,则可以更改该工具实例的InstanceProps.Appearance属性。
SharedProps和InstanceProps对象使您能够在工具的所有实例之间全局应用设置,并可以灵活地覆盖特定工具实例的所选设置。
隐藏上方快速启动栏
改为False即可。
当隐藏QuickAccessToolBar的时候,2010样式的文件菜单的返回按钮会被遮挡。目前没找到好的办法,只能把快速启动栏放出来。我正在官方论坛提问,后续更新进展。
InstanceProps 为空?
获取不到InstanceProps?
按官方的的解释。InstanceProps 和 SharedProps 分别为根工具和实例工具。 根工具倾向于负责创建即将出现的工具样式,比如New 一个Button 的时候。而InstanceProps 则是在这个工具实例化以后,对其外观或属性进行处理。
SharedProps对象上可以找到适用于根工具和该工具所有实例的属性,可通过该工具的SharedProps属性对其进行访问。顾名思义,SharedProps对象的属性在该工具的所有实例之间共享。对这些属性之一进行更改将影响根工具和该工具的所有其他实例。
在InstanceProps对象上找到仅影响该工具的单个实例的属性,可通过该工具的InstanceProps属性访问该属性。尽管根工具具有InstanceProps属性,但此属性返回Null,因为没有与根工具关联的实例属性。
简单说,你通过代码所创建的按钮,均是继承自buttonTool,即new 了一个ButtonTool,此时的InstanceProps是没有的,因为它指的是整个ButtonTool类,不是当前的按钮。
this.ultraToolbarsManager1.Ribbon.Tabs[info.Key].Groups[groupItem.Key].Tools[buttonTool.Key].InstanceProps.IsFirstInGroup = true;
而
this.ultraToolbarsManager1.Ribbon.Tabs[info.Key].Groups[groupItem.Key].Tools[buttonTool.Key].InstanceProps.MinimumSizeOnRibbon = RibbonToolSize.Large;具有在此控件中的实体位置(实例位置),所以具有实例属性InstanceProps
创建完按钮后,根据其所在位置,进行逐层寻找,找到后,其InstanceProps是可以直接使用的。不会报错。
IsFirstInGroup 属性需要打开!!!
概念需要实际操作才能理解。不过另有简单方法,首先在画面上拖一个控件,新建组、新建按钮,直接右键设置其属性。比如,Large,然后在Designer文件中查找Large。确实是有的,并且生效了。
因为你通过画面交互,创建了一个实体的按钮,有具体位置,独立于ButtonTool。
另,关于文件菜单显示不全的问题,当隐藏上方快捷栏或者缩小上下宽度时。2013样式下,点击系统菜单,里面部分选项的文本会被切割掉,隐藏掉一部分,总之不显示了。问了官方。官方说他们注意到了这个问题,但是,不了了之。。。。。。