C# WinForm实现一个专业的 Ribbon 控件 - 小众知识

C# WinForm实现一个专业的 Ribbon 控件

2015-03-27 01:23:03 苏内容
  标签: C//控件
阅读:12748

www.codeproject.com上的一个比较完善的Ribbon控件。学习和使用都是不错的。


作者: Jose M. Menendez Poó
翻译: Yuxiang
发表日期: 2008-5-8
更新日期: 2008-5-29

 

  • 下载演示程序 

  • 下载源代码(http://www.codeproject.com/KB/toolbars/WinFormsRibbon.aspx) 


 

简介

由于在网站上缺少好的免费的 Ribbon 控件,我决定自己编写一个。我分析了以前(包括那些在 CodeProject 上)的 ribbon 控件的工作机制。很不幸,大多数已有的控件只是差劲的尝试。为什么这样说?因为它们有些缺少好的绘制,有些缺少改变大小的功能,有些几乎是什么都缺。当然,已开发的好的 Ribbon 控件需要付费。这个 ribbon 是免费的。

为什么不使用 WPF?主要的原因是我需要把 Ribbon 添加到已有的 WinForms 应用程序中。依我看来,这不是“不”使用WPF,而是“还没有”使用。无论如何,你可以在WPF 中承载(host) 一个 WinForms 控件(参阅 http://msdn.microsoft.com/en-us/library/ms750944.aspx)。

一些设计目标

实现 — 此 ribbon 包含在一个 Control 窗口中,它内部的每个元素作为控件内部的一系列 bounds 管理,就像 ToolStrip 控件那样。 尽管从 ribboon 的内部代码来管理是困难的,但是这是让它保持最佳实现 ribbon 的一种方式。 相信我,下载演示程序,运行它并改变窗体的大小。它完成得很漂亮。

与 Office ribbon 的一致性 — 我曾经读过有关 Jakob Nielsen 讲述的大多数用户更喜欢所使用的程序看起来像 Word, Excel 或 Powerpoint。这相关明显,因为人们每天都使用这些软件。视觉效果与 office 的 ribbon 一致是非常重要的,因为人们已经知道期待什么,并且那是有益的用法。 我尝试让每个 Ribbon 中的元素的外观及行为严格地与 Office 的 ribbon 一致。

易于为程序员使用 — 组件命名与大多数 WinForms 命名系统一致, 更多的使用 ToolStrip 元素。为类似的元素的属性,事件和方法命名就像在 ToolStrip 的工艺项那样。

设计时刻支持 — 我将会添加越来越多的设计时刻支持,因此你可以在设计器中 100% 地管理这个 ribbon。

当我发现 bugs 或者你乐于让我知道它们,我将会提供 更新 和 修正 。

使用 Ribbon

此 ribbon 位于 System.Windows.Forms 命名空间,就像其它控件,我想使用诸如  MyCoolFirm.MyCoolNameSpace.MyCoolSubNameSpace 等的控件命名方式是让人不爽的(请仅为商业对象进行这样的命名)。

你可以添加对已经编译的 dll (System.Windows.Forms.Ribbon.dll )的引用,或者你可以直接复制源码文件到你的项目文件夹中。现在代码已设计好,你可以只复制源码文件,不需要任何额外的资源。

快速指南

此 ribbon 主要由三种元素组成:标签(tabs),标签上的面板(panels on the tabs,其他开发人员称它们为组),以及在面板内部的项目(items inside the panels)。


 

这些元素通过 RibbonTab, RibbonPanel 和 RibbonItem 类型进行表现。 RibbonItem 是一个为任何承载于 RibbonPanel 或 RibbonDropDown 之上的项提供基本功能的抽象类。

你可以使用 Ribbon 的智能标记来添加标签,可以通过选定标签并调用在属性表底部的“Add Panel(添加面板)”动作来添加标签的面板。

Ribbon 上的元素依据可用的 ribbon 空间来调整大小。这是 ribbon 的关键特征。通过调整大小,它试图把所有可用的命令都显示在屏幕上,而不是在溢出的按钮上隐藏它们(就像旧式的 ToolStrip 那样)。

我使用三种尺寸来处理:Large(大), Medium(中等) 和 Compact(紧凑)。一个附加的尺寸用于面板,因为面板可以被折叠,然后它们采用 Overflow 大小模式。

扩展阅读
相关阅读
© CopyRight 2010-2021, PREDREAM.ORG, Inc.All Rights Reserved. 京ICP备13045924号-1