介绍
由于在Web上缺少好用的免费Ribbon控件,我决定自己写一个。分析了以前的Ribbon控件,其中也包括了在CodeProject上的,不幸的是,现存的大部分控件几乎都是失败的尝试。为什么呢?或缺少好的渲染,或缺少尺寸变化特性,或缺少所有的东西。当然,有一些好的Ribbon控件需要付费才能使用。这个Ribbon是免费的。
为什么不用WPF呢?主要的,由于我需要将Ribbon添加到我以前的WinForms应用程序中。在我看来它对于WPF来说不是”no”,仅仅是”not yet”。不管怎样,你可以在WPF中使用WinForms控件。
一些设计目标
性能这个Ribbon包括在一个控件窗口中,所有内含的要素使用一系列范围来管理,就如ToolStrip控件一样。尽管在Ribbon内部代码上管理很困难,但是这是保持最好Ribbon性能的一种方式。相信我,下载例子,运行它,改变窗口大小。它执行得很优雅。
和Office’s Ribbon的兼容性 我曾经读过JakobNielsen说的一个东西,大部分用户喜欢界面像Word,Excel和PowerPoint的程序。这个是显然的,因为人们每天都要使用这些软件。提供与Office’s Ribbon视觉上的统一是十分重要的,因为这样的话,人们已经知道它是什么样子,这是一个使用上的优势。我已经尽力让所有的元素的外观和行为和Office’s ribbon一样。
开发者方便的使用组件的名字和大部分WinForms命名体系一致,更多的与ToolStrip元素一致。属性、事件和方法命名和ToolStrip技术很像。
设计者支持我将添加更多的设计者支持,因此在设计器中百分百的控制Ribbon。试一试吧。
我会提供升级和bug修复,当我发现它们或你友好的让我知道它们。
使用Ribbon
Ribbon在System.Windows.Forms命名空间中,和其它控件一样,我认为使用命名得类似MyCoolFirm.MyCoolNameSpace.MyCoolSubNameSpace一样的控件是令人讨厌的。
你可以添加DLL引用或直接拷贝源文件到你的工程文件中。这个代码当前的设计可以让你直接拷贝源文件,它不需要任何额外的资源。
实践:快速指南
Ribbon主要是由三种元素组成:tabs、tabs上的panels和panels中的items。
这些元素用RibbonTab,RibbonPanel和RibbonItem类型表示。RibbonItem是一个虚基类,它提供了在RibbonPanel或RibbonDropDown中的任何Item的基本函数。
你可以使用Ribbon的智能标签进行tabs添加,你可以选择tab和调用属性表格的底部的AddPanel动作添加Panels到tab。
Ribbon上的元素根据可用空间进行大小调整。这个是ribbon的主要特性。它试图将所有可能的命令展示在屏幕上,通过大小调整,而不是用额外的按钮隐藏它们(如旧的ToolStrip)。
我视为三种尺寸:Large,Medium和Compact。由于Panels可以收起,Overflow尺寸被使用。
注意:没有方法直接调整元素的范围,大小总是由ribbon内部的布局引擎提供的。事实上,布局依靠两个因素:可用的水平尺寸、items的大小模型。
如果没有足够的尺寸,panel会收起。如果所有面板收起,但是空间仍然不够,一个滚动按钮将会出现,因此用户可以水平滚动面板。
Buttons
只有一种按钮:RibbonButton。它有三种样式:
RibbonButton添加了SmallImage属性,你可以设置button在medium和compact模式下的图片。尽管没有功能限制,但是Image属性最好使用32*32像素的图片,SmallImage最好使用16*16像素的图片。大小不同时结果将无法预料。
注意:使用DropDownItems属性添加items到按钮的Dropdown。
Size模型不一样buttons的外观不一样。
ItemGroups
像那些在Font和Paragraphpanels上的buttons是RibbonButton buttons包括在RibbonItemGroup goup中。
添加到RibbonItemGroup中的Items将会以compact大小模型被量测和对待。
重要:如果RibbonPanel包含RibbonItemGroup对象,你可以设置RibbonPanel.FlowsTo属性为Right。这些对象的布局将不同对待。
Lists
Lists用RibbonButtonList表示,提供两个集合:Buttons和DropDownItems。这是因为list可以在ribbon上滚动,下来出来更多items。List的dropdown支持使用东南角的手柄进行大小改变。
如果你希望list中的buttons可以再dropdown中看到,你需要显式的使用这些按钮添加另一个list到DropDownItems属性。
Separators
Separators用RibbonButtonSeparator表示,提供周知的分隔功能。在下拉列表中,Separators可以包含文本。当它们包含文本时,渲染会不一样。
教程
在ribbon.codeplex.com开始学习Ribbon。
已知的Bugs
Multiple dropdowns没有控制好。
当鼠标按下时绘制收起的panels。
要做的事情
Contextual tabs
ToolTips
(OK) TextBox, ComboBox
Checkbox and NumericUpDown RibbonItems
Orb and Quickaccess tools
Vista clientarea docking
Keyboard quick access through Alt key
Font and Color selectors
Right to left orientation
Ribbon minimization
历史
2008年5月8日原始发布
2008年5月29日更新
Enabled属性可以工作了
添加RibbonTextBox
添加RibbonComboBox
添加RibbonColorChooser
2009年2月23日更新
Orb和orb菜单用设计器能力
添加QuickAccess Toolbar
一些bugs修复
2009年5月1日更新
Orb和Quick access嵌入到非客户区域
Popup menus修复
支持很多事件处理
少数bugs修复
许可
This article, along with any associated source code and files, islicensed under The Microsoft Public License(Ms-PL)
关于作者
JoseMenendez Póo Team Leader Mexico
Jose ManuelMenéndez Poó
- I've been programming Windows and Web apps since1997.
- My greatest concern nowadays is user interfaceusability.
Questions and stuff by twitter: @menendezpoo
Blog
menendezpoo.com