随笔- 1  评论- 0  文章- 0 

在Office应用程序中共享同一个自定义功能区(Ribbon)

作者: Norm Estabroke
职位:BizApps组用户培训项目作者
原文标题 Share a Ribbon Customization between Office Applications
原文链接 http://blogs.msdn.com/vsto/archive/2008/03/10/share-a-ribbon-customization-between-office-applications.aspx
原文发布时间:2008年3月10日 13点01分

我们从用户中收到一些反馈,希望能够在多个Office应用程序中重用同一个可视化设计器设计的功能区。这个想法是非常有用的,如果同样的自定义选项卡能用于每一个应用程序,那为什么还要给每个不同的Office项目创建相同的功能区呢?

所以我四处询问,寻找一个解决方案。我找到了一个曾经参与开发VSTO功能区设计器的程序员,他向我展示了如何在多个Office项目中共享自定义功能区。

首先,在VSTO解决方案添加一个功能区项;然后,将功能区项的代码文件复制到一个类库项目中;最后,在其他VSTO项目添加对这个类库项目(或者生成的程序集)的引用。恩,这很简单,不是吗?以下是详细步骤:

创建功能区

  1. 在Visual Studio 2008中创建一个Office 2007的项目,Excel、Outlook、PowerPoint或者Word任选。为了下文叙述方便,我们采用C#语言来创建项目,这个项目名称叫做RibbonStarterProject
  2. 添加一个功能区(可视化设计器)项到项目中,就采用默认的名称“Ribbon1”。
  3. 保存并且关闭项目。

创建类库工程

  1. 在Visual Studio中创建一个类库(Class Library)项目,项目的名称叫做SharedRibbonLibrary
  2. 在项目中添加对程序集 Microsoft.Office.Tools.Common.V9.0 的引用。
  3. 在Visual Studio的项目(Project)菜单中,点击添加已存在的项(Add Existing Item...)
  4. 添加已存在的项对话框中,导航到"RibbonStarterProject"项目的文件夹,选中Ribbon1.cs文件,单击添加(Add)按钮。Ribbon1.cs就被复制到当前项目的文件夹下,同时在解决方案资源管理器(Solution Explorer)里项目节点下会增加对应的节点。
  5. 双击Ribbon1.cs打开功能区设计器。(译者注:如果只能打开代码编辑器,请检查第二步添加引用的程序集是否正确。)
  6. 工具箱(Toolbox)Office功能区控件(Office Ribbon Controls)选项卡中,将一个按钮拖到功能区设计器中的group1
  7. 单击button1将其选中。
  8. 属性窗口中,将访问控制符(Modifier)设置为公共的(Public)
    注意:在默认的情况下,用户添加到功能区的控件都是内部的(Internal),即只允许同一个程序集的代码可以访问。然而,当需要共享功能区和里面的控件,就不得不通过对程序集之间的引用来实现,因此,为了让其他程序集的代码可以访问控件,访问控制符(Modifier)就必须设置为公共的。后面马上就会看到这样做的好处。
  9. 右键单击功能区设计器,然后点击属性
  10. 属性窗口中,点击功能区类型(RibbonType)属性,然后选择对应的应用程序功能区ID(译者注:Outlook有多个功能区ID,对应不同的邮件类,可以分别定制是否需要显示功能区)。关于这个属性的更多信息,请参考MSDN上的RibbonType属性。
  11. 解决方案资源管理器中,右键单击Ribbon1.cs,然后单击显示代码(View Code)
  12. 将类的命名空间修改为“SharedRibbonLibrary”。
  13. 对Ribbon1.designer.cs文件重复上11和12步。
  14. 编译并且保存SharedRibbonLibrary项目。现在在其他的VSTO项目中就可以使用生成的程序集来增加功能区的支持。

使用自定义功能区

  1. 创建一个Office 2007项目,Excel、Outlook、PowerPoint和Word任选。
  2. 添加对SharedRibbonLibrary程序集的引用。
  3. 添加以下代码到新项目的ThisAddin、ThisWorkbook或者ThisDocument类(取决于具体的VSTO项目)里面。
    这段代码重载了CreateRibbonExtensibilityObject方法,并将功能区对象返回给Office应用程序。

    Code
  4. 添加一个新类到项目中,使用默认的名称"Class1.cs"。
  5. 用以下代码替换Class1文件中的代码:
    Code

好了,都完成了,现在已经可以使用代码来访问功能区和功能区中的按钮了。让我们再尝试怎么处理一个事件。

处理按钮点击事件

  1. 在项目的startup事件处理函数中添加如下代码:
    Code
  2. 在项目中继续添加按钮的事件处理函数:
    Code
  3. F5运行项目。
  4. 当Office应用程序打开以后,单击“外接程序”(Add-ins)选项卡,单击自定义按钮,就能看到“I can handle events”消息框弹出。
posted on 2008-10-22 15:36  Stony Wang  阅读(...)  评论(...编辑  收藏