更新迁移到 .NET Framework 4.5 的功能区自定义项

如果项目包含使用 功能区(可视化设计器) 项目项创建的功能区自定义项,则必须对项目代码进行以下更改(如果目标框架更改为 .NET Framework 4 或更高版本)。

  • 修改生成的功能区代码。

  • 修改在运行时实例化功能区控件、处理功能区事件或以编程方式设置功能区组件位置的任何代码。

更新生成的功能区代码

如果项目的目标框架更改为 .NET Framework 4 或更高版本,则必须通过执行以下步骤来更改功能区项生成的代码。 你需要更新的代码文件取决于编程语言和你创建项目的方式:

  • 在 Visual Basic 项目中,或在 Visual C# 项目(Visual Studio 2012 或 Visual Studio 2010 中创建)中执行功能区代码隐藏文件(YourRibbonItem)中的所有步骤。Designer.cs 或 YourRibbonItem。Designer.vb)。 若要查看 Visual Basic 项目中的代码隐藏文件,请单击解决方案资源管理器中的显示所有文件”按钮。

  • 在 Visual Studio 2008 中创建的 Visual C# 项目中,然后升级到 Visual Studio 2013,执行功能区代码文件中的前两个步骤(YourRibbonItem.csYourRibbonItem.vb),并在功能区代码隐藏文件中执行剩余的步骤。

若要更改生成的功能区代码

  1. 修改 Ribbon 类的声明,使它可以从 RibbonBase 而不是从 Microsoft.Office.Tools.Ribbon.OfficeRibbon 派生。

  2. 修改 Ribbon 类的构造函数,如下所示。 如果你已向构造函数添加了自己的所有代码,则不要更改你的代码。 在 Visual Basic 项目中,仅修改无参数构造函数。 忽略另一个构造函数。

    下面的代码示例介绍了面向 .NET Framework 3.5 的项目中的 Ribbon 类的默认构造函数。

    public Ribbon1()
    {
        InitializeComponent();
    }
    

    下面的代码示例演示面向 .NET Framework 4 或更高版本的项目中功能区类的默认构造函数。

    public Ribbon1()
        : base(Globals.Factory.GetRibbonFactory())
    {
        InitializeComponent();
    }
    
  3. InitializeComponent 方法中,修改构造功能区控件的任何代码,使代码能够改用 RibbonFactory 对象的一种帮助器方法。

    注意

    在 Visual C# 项目中,必须展开名为 Component Designer generated code 的区域才能查看 InitializeComponent 方法。

    例如,假设文件包含以下代码行,该代码行可实例化面向 .NET Framework 3.5 的项目中名为 button1RibbonButton

    this.button1 = new Microsoft.Office.Tools.Ribbon.RibbonButton();
    

    在面向 .NET Framework 4 或更高版本的项目中,必须改用以下代码。

    this.button1 = this.Factory.CreateRibbonButton();
    

    有关功能区控件的帮助程序方法的完整列表,请参阅 实例化功能区控件

  4. 在 Visual C# 项目中,修改 InitializeComponent 方法中的任何代码行,该方法使用 EventHandler<TEventArgs> 委托来改用特定功能区委托。

    例如,假设文件包含以下代码行,该代码行可处理面向 .NET Framework 3.5 的项目中的 Click 事件。

    <CodeContentPlaceHolder>8 在面向 .NET Framework 4 或更高版本的项目中,必须改用以下代码。

    <CodeContentPlaceHolder>9 有关功能区委托的完整列表,请参阅 “处理功能区事件”。

  5. 在 Visual Basic 项目中,找到文件末尾的 ThisRibbonCollection 类。 修改此类的声明,以便它不再继承自 Microsoft.Office.Tools.Ribbon.RibbonReadOnlyCollection

实例化功能区控件

必须修改可动态实例化功能区控件的任何代码。 在面向.NET Framework 3.5 的项目中,功能区控件是你可以直接在某些方案中进行实例化的类。 在面向 .NET Framework 4 或更高版本的项目中,这些控件是无法直接实例化的接口。 你必须通过使用由 RibbonFactory 对象提供的方法创建控件。

可通过两种方法来访问 RibbonFactory 对象:

  • 通过使用功能区类的 Factory 属性。 可从 Ribbon 类中的代码使用此方法。

  • 通过使用 Globals.Factory.GetRibbonFactory 方法。 可从 Ribbon 类外的代码使用此方法。 有关 Globals 类的详细信息,请参阅对办公室项目中对象的全局访问。

    下面的代码示例演示如何 RibbonButton 在面向 .NET Framework 4 或更高版本的项目中创建功能区类。

<CodeContentPlaceHolder 10<CodeContentPlaceHolder>>11 下表列出了可以编程方式创建的控件,以及用于在面向 .NET Framework 4 或更高版本的项目中创建控件的方法。

控制 在 .NET Framework 4 及更高版本中使用 RibbonFactory 方法
RibbonButton CreateRibbonButton
RibbonButtonGroup CreateRibbonButtonGroup
RibbonCheckBox CreateRibbonCheckBox
RibbonComboBox CreateRibbonComboBox
RibbonDialogLauncher CreateRibbonDialogLauncher
RibbonDropDown: CreateRibbonDropDown
RibbonDropDownItem CreateRibbonDropDownItem
RibbonEditBox CreateRibbonEditBox
RibbonGallery CreateRibbonGallery
RibbonGroup CreateRibbonGroup
RibbonLabel CreateRibbonLabel
RibbonManager CreateRibbonManager
RibbonMenu CreateRibbonMenu
RibbonSeparator CreateRibbonSeparator
RibbonSplitButton CreateRibbonSplitButton
RibbonTab CreateRibbonTab
RibbonToggleButton CreateRibbonToggleButton

处理功能区事件

必须修改可以处理功能区控件的事件的任何代码。 在面向 .NET Framework 3.5 的项目中,这些事件由泛型 EventHandler<TEventArgs> 委托处理。 在面向 .NET Framework 4 或更高版本的项目中,这些事件现在由其他委托处理。

下表列出了面向 .NET Framework 4 或更高版本的项目中的功能区事件和与其关联的委托。

事件 委托在 .NET Framework 4 及更高版本中使用
生成的 Ribbon 类中的 LoadImage 事件 RibbonLoadImageEventHandler
Load RibbonUIEventHandler
Click

Click

ItemsLoading

TextChanged

ButtonClick

ItemsLoading

SelectionChanged

TextChanged

ButtonClick

Click

ItemsLoading

DialogLauncherClick

ItemsLoading

Click

Click
RibbonControlEventHandler

以编程方式设置功能区组件的位置

必须修改可设置功能区组、选项卡或控件位置的任何代码。 在面向.NET Framework 3.5 的项目中,你可以使用静态 Microsoft.Office.Tools.Ribbon.RibbonPosition 类的 AfterOfficeIdBeforeOfficeId 方法来分配组、选项卡或控件的 Position 属性。 在面向 .NET Framework 4 或更高版本的项目中,必须使用对象提供RibbonFactory的属性来访问这些方法RibbonPosition

可通过两种方法来访问 RibbonFactory 对象:

  • 通过使用 Ribbon 类的 Factory 属性。 可从 Ribbon 类中的代码使用此方法。

  • 通过使用 Globals.Factory.GetRibbonFactory 方法。 可从 Ribbon 类外的代码使用此方法。 有关 Globals 类的详细信息,请参阅对办公室项目中对象的全局访问。

    下面的代码示例演示了面向 .NET Framework 3.5 的项目中 Ribbon 类的选项卡的 Position 属性。

this.tab1.Position = RibbonPosition.AfterOfficeId("TabHome");

下面的代码示例演示面向 .NET Framework 4 的项目中的相同任务。

this.tab1.Position = this.Factory.RibbonPosition.AfterOfficeId("TabHome");