一个专业的 Ribbon 供您使用(现在带有 orb!)






4.96/5 (563投票s)
一个严肃的 Office 风格 Ribbon 控件项目
新增:阅读有关将Ribbon嵌入非客户端区域的指南。

引言
由于网上缺乏好的免费Ribbon控件,我决定自己写一个。我分析了以前关于Ribbon控件的工作,包括CodeProject上的。不幸的是,大多数现有的控件都只是糟糕的尝试。为什么?嗯,有些缺乏漂亮的渲染,有些缺乏调整大小的功能,有些几乎什么都缺。当然,有开发完善的Ribbon控件是收费的。这个Ribbon是免费的。
为什么不用WPF?主要是因为我需要Ribbon控件来添加到我现有的WinForms应用程序中。我认为(简而言之)这并不是对WPF的否定,只是“还没到”。无论如何,您可以在WPF中托管WinForms控件(参见此链接)。
部分设计目标
性能 - 此Ribbon包含在一个控件窗口中,其中的每个元素都被管理为控件内的一组边界,就像ToolStrip
控件所做的那样。虽然这使得Ribbon内部代码难以管理,但这是保持Ribbon最佳性能的一种方式。相信我,下载演示,运行它并调整窗口大小。它的性能非常出色。
与Office Ribbon的一致性 - 我曾读到过Jakob Nielsen说过,大多数用户更喜欢他们使用的程序看起来就像Word、Excel或PowerPoint一样。这很明显,因为人们每天都在使用这些软件。提供与Office Ribbon的视觉一致性非常重要,因为人们已经知道会发生什么,这是一种可用性优势。我试图让Ribbon中的每个元素看起来和行为都与Office Ribbon中的完全一样。
易于程序员使用 - 组件的命名与大多数WinForms命名系统一致,甚至与ToolStrip
元素更一致。相似元素的属性、事件和方法名称与ToolStrip
技术项的名称相同。
设计器支持 - 我将添加越来越多的设计器支持,以便您可以完全从设计器中管理Ribbon。试试看。
我将提供更新和错误修复,在我发现它们或您好心告知我之后。
使用Ribbon
Ribbon与所有其他控件一样,位于System.Windows.Forms
命名空间中。我认为使用像MyCoolFirm.MyCoolNameSpace.MyCoolSubNameSpace
这样的命名控件很烦人(请仅将此用于业务对象)。
您可以向编译后的DLL添加引用:System.Windows.Forms.Ribbon.dll,或者您可以直接将源文件复制到项目中的某个文件夹。代码目前设计为可以直接复制源文件,无需任何额外资源。
上手:快速指南
Ribbon主要由三类元素组成:选项卡、选项卡上的面板(其他开发人员称之为组)以及面板内的项目。
这些元素由RibbonTab
、RibbonPanel
和RibbonItem
类型表示。RibbonItem
是一个abstract
类,它为托管在RibbonPanel
或RibbonDropDown
中的任何项提供基本功能。
您可以从Ribbon
的智能标记中添加选项卡,可以通过选择选项卡并在属性网格的底部调用“AddPanel
”动词来向选项卡添加面板。
Ribbon中的元素会根据Ribbon的可用空间进行调整。这是Ribbon的一个关键特性。它试图通过调整大小来将所有可能的命令显示在屏幕上,而不是像旧的ToolStrip
那样将它们隐藏在溢出按钮中。
我将此视为三种大小:Large、Medium和Compact。面板还有一个附加大小,因为面板可以折叠,然后它们将采用Overflow大小。

注意:无法直接影响Ribbon上元素的边界,大小将始终由Ribbon内部的布局引擎决定。事实上,布局取决于两个因素:Ribbon的可用水平空间以及项的大小模式。
如果Ribbon中没有可用空间用于某个面板,则该面板将被折叠。如果所有面板都已折叠但仍未分配空间,则会出现一个滚动按钮,以便用户可以水平滚动面板。
按钮
只有一种类型的按钮:RibbonButton
。它可以设置为三种样式

RibbonButton
添加了SmallImage
属性,因此您可以设置按钮在Medium或Compact模式下显示的图像。虽然功能上没有限制,但强烈建议Image
属性只使用32 x 32像素,SmallImage
属性使用16 x 16像素。尺寸不同时结果会出乎意料。
注意:使用DropDownItems
属性向按钮的下拉菜单添加项。
按钮的外观会因大小模式而异。
ItemGroups
Font和Paragraph面板中的按钮是托管在RibbonItemGroup
组中的RibbonButton
按钮。

添加到RibbonItemGroup
的项将始终以Compact大小模式进行测量和处理。
重要:如果RibbonPanel
将托管RibbonItemGroup
对象,则必须将RibbonPanel.FlowsTo
属性设置为Right
。这些项的布局处理方式不同,因为组是按行流动的。
列表
列表由RibbonButtonList
表示,并提供两个集合:Buttons
和DropDownItems
。这是因为列表可以在Ribbon上滚动,并且可以下拉更多项。列表的下拉菜单支持通过右下角的抓手进行调整大小。
如果您希望列表中的按钮显示在下拉菜单中,您必须显式地将另一个包含这些按钮的列表添加到DropDownItems
属性中。
分隔符
分隔符由RibbonButtonSeparator
表示,并提供众所周知的分隔符功能。在下拉菜单中时,分隔符实际上可以包含文本。当它们包含文本时,它们的渲染方式会不同。

教程
- 在ribbon.codeplex.com开始使用Ribbon
已知bug
- 多个下拉菜单未处理 OK
- 折叠面板在鼠标按下时的绘制
待办事项
- 上下文选项卡
- 工具提示
- (OK) TextBox、ComboBox
- Checkbox和NumericUpDown RibbonItems
- Orb和Quickaccess工具
- Vista客户端区域停靠
- 通过Alt键进行键盘快速访问
- 字体和颜色选择器
- 从右到左的文本方向
- Ribbon最小化
历史
- 2008年5月8日 - 原始帖子
- 2008年5月29日 - 更新
Enabled
属性现在可以正常工作- 添加了
RibbonTextBox
- 一个带有标签和图像的常规文本框 - 添加了
RibbonComboBox
- (继承自RibbonTextBox
)提供一个下拉菜单 - 添加了
RibbonColorChooser
- 一个显示颜色条的按钮。请参阅Color
属性
- 2009年2月23日 - 更新
- Orb和Orb菜单支持设计器功能
- 添加了快速访问工具栏
- 修复了一些错误
- 2009年5月1日 - 更新
- Orb和快速访问已嵌入非客户端区域
- 弹出菜单已修复!
- 支持大量事件处理程序
- 修复了次要 bug