一个专业的Winfrom下的ribbon

本文介绍了一个用于WinForms应用程序的免费Ribbon控件,旨在提供良好的性能、与Office Ribbon的一致性,并且便于开发者使用。该控件支持多种元素类型,如tabs、panels和items,以及按钮样式、列表和分隔符等功能。通过简单的引用或复制源文件即可集成到项目中,同时提供了升级和bug修复服务。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >



介绍

由于在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

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值