更新迁移到 .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.cs 或 YourRibbonItem.vb),并在功能区代码隐藏文件中执行剩余的步骤。
若要更改生成的功能区代码
修改 Ribbon 类的声明,使它可以从 RibbonBase 而不是从
Microsoft.Office.Tools.Ribbon.OfficeRibbon
派生。修改 Ribbon 类的构造函数,如下所示。 如果你已向构造函数添加了自己的所有代码,则不要更改你的代码。 在 Visual Basic 项目中,仅修改无参数构造函数。 忽略另一个构造函数。
下面的代码示例介绍了面向 .NET Framework 3.5 的项目中的 Ribbon 类的默认构造函数。
下面的代码示例演示面向 .NET Framework 4 或更高版本的项目中功能区类的默认构造函数。
在
InitializeComponent
方法中,修改构造功能区控件的任何代码,使代码能够改用 RibbonFactory 对象的一种帮助器方法。注意
在 Visual C# 项目中,必须展开名为
Component Designer generated code
的区域才能查看InitializeComponent
方法。例如,假设文件包含以下代码行,该代码行可实例化面向 .NET Framework 3.5 的项目中名为
button1
的 RibbonButton。在面向 .NET Framework 4 或更高版本的项目中,必须改用以下代码。
有关功能区控件的帮助程序方法的完整列表,请参阅 实例化功能区控件。
在 Visual C# 项目中,修改
InitializeComponent
方法中的任何代码行,该方法使用 EventHandler<TEventArgs> 委托来改用特定功能区委托。例如,假设文件包含以下代码行,该代码行可处理面向 .NET Framework 3.5 的项目中的 Click 事件。
<CodeContentPlaceHolder>8 在面向 .NET Framework 4 或更高版本的项目中,必须改用以下代码。
<CodeContentPlaceHolder>9 有关功能区委托的完整列表,请参阅 “处理功能区事件”。
在 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 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
类的 AfterOfficeId
和 BeforeOfficeId
方法来分配组、选项卡或控件的 Position
属性。 在面向 .NET Framework 4 或更高版本的项目中,必须使用对象提供RibbonFactory的属性来访问这些方法RibbonPosition。
可通过两种方法来访问 RibbonFactory 对象:
通过使用 Ribbon 类的
Factory
属性。 可从 Ribbon 类中的代码使用此方法。通过使用
Globals.Factory.GetRibbonFactory
方法。 可从 Ribbon 类外的代码使用此方法。 有关 Globals 类的详细信息,请参阅对办公室项目中对象的全局访问。下面的代码示例演示了面向 .NET Framework 3.5 的项目中 Ribbon 类的选项卡的
Position
属性。
下面的代码示例演示面向 .NET Framework 4 的项目中的相同任务。