65.9K
CodeProject 正在变化。 阅读更多。
Home

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

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.96/5 (563投票s)

2008年5月8日

Ms-PL

6分钟阅读

viewsIcon

2532077

downloadIcon

141950

一个严肃的 Office 风格 Ribbon 控件项目

新增:阅读有关将Ribbon嵌入非客户端区域的指南。

WinFormsRibbon/ribbon_0.4.008.jpg

引言

由于网上缺乏好的免费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主要由三类元素组成:选项卡、选项卡上的面板(其他开发人员称之为组)以及面板内的项目。

WinFormsRibbon/ribbontab.gif

WinFormsRibbon/ribbonpanel.gif

WinFormsRibbon/ribbonitems.gif

这些元素由RibbonTabRibbonPanelRibbonItem类型表示。RibbonItem是一个abstract类,它为托管在RibbonPanelRibbonDropDown中的任何项提供基本功能。

您可以从Ribbon的智能标记中添加选项卡,可以通过选择选项卡并在属性网格的底部调用“AddPanel”动词来向选项卡添加面板。

Ribbon中的元素会根据Ribbon的可用空间进行调整。这是Ribbon的一个关键特性。它试图通过调整大小来将所有可能的命令显示在屏幕上,而不是像旧的ToolStrip那样将它们隐藏在溢出按钮中。

我将此视为三种大小:Large、Medium和Compact。面板还有一个附加大小,因为面板可以折叠,然后它们将采用Overflow大小。

WinFormsRibbon/ribbonpanelsizes.gif

注意:无法直接影响Ribbon上元素的边界,大小将始终由Ribbon内部的布局引擎决定。事实上,布局取决于两个因素:Ribbon的可用水平空间以及项的大小模式。

如果Ribbon中没有可用空间用于某个面板,则该面板将被折叠。如果所有面板都已折叠但仍未分配空间,则会出现一个滚动按钮,以便用户可以水平滚动面板。

Click to enlarge image

按钮

只有一种类型的按钮:RibbonButton。它可以设置为三种样式

WinFormsRibbon/ribbonbuttonstyles.gif

RibbonButton添加了SmallImage属性,因此您可以设置按钮在Medium或Compact模式下显示的图像。虽然功能上没有限制,但强烈建议Image属性只使用32 x 32像素,SmallImage属性使用16 x 16像素。尺寸不同时结果会出乎意料。

注意:使用DropDownItems属性向按钮的下拉菜单添加项。

按钮的外观会因大小模式而异。

ItemGroups

Font和Paragraph面板中的按钮是托管在RibbonItemGroup组中的RibbonButton按钮。

WinFormsRibbon/ribbonitemgroup.gif

添加到RibbonItemGroup的项将始终以Compact大小模式进行测量和处理。

重要:如果RibbonPanel将托管RibbonItemGroup对象,则必须将RibbonPanel.FlowsTo属性设置为Right。这些项的布局处理方式不同,因为组是按行流动的。

列表

列表由RibbonButtonList表示,并提供两个集合:ButtonsDropDownItems。这是因为列表可以在Ribbon上滚动,并且可以下拉更多项。列表的下拉菜单支持通过右下角的抓手进行调整大小。

如果您希望列表中的按钮显示在下拉菜单中,您必须显式地将另一个包含这些按钮的列表添加到DropDownItems属性中。

分隔符

分隔符由RibbonButtonSeparator表示,并提供众所周知的分隔符功能。在下拉菜单中时,分隔符实际上可以包含文本。当它们包含文本时,它们的渲染方式会不同。

WinFormsRibbon/ribbondropdown.gif

教程

  • 在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
© . All rights reserved.