细品RibbonX(54):RibbonX和Visual Studio(2)
资料整理来自于论坛
完整版下载地址:http://download.csdn.net/download/nodeman/10264659
Loading ...
下面,让我们继续使用Visual Studio为功能区添加更多的功能。
- 创建带有组和控件的新选项卡
- 在现有的选项卡中添加新控件
- 在Office菜单中添加新控件
- 重利用现有选项卡中的控件
- 重利用Office菜单中的控件
重利用是指将现有的控件实现新功能或者增强现有的功能。
在Visual Studio中处理图形
在使用Visual Studio时,必须提供图形作为加载项的一部分,这意味着要创建额外的代码。满足这项特定需求的XML作为customUI元素的一部分:
<customUIxmlns="http://schemas.microsoft.com/office/2006/01/customui"
onLoad="Ribbon_Load"
loadImage="GetImage">
在代码中,loadImage属性提供对GetImage()方法的调用,但GetImage()方法不知道要求向Office应用程序发送哪个图标或图像,因此必须以某种方式创建使它能处理任何需求。下面是GetImage()方法的代码:
Public Function GetImage(ByVal ImageName As String) As Bitmap
' 包含传递到Office的位图
Dim ThisBitmap As Bitmap = New Bitmap(20, 20)
' 发现图像名和相应的资源
Select Case ImageName
Case "Colorblk2"
ThisBitmap = New Bitmap(My.Resources.Colorblk2)
Case "TIME"
ThisBitmap = New Bitmap(My.Resources.TIME.ToBitmap())
End Select
' 返回简单的位图
Return ThisBitmap
End Function
本例使用两类不同的图像。第一个是标准的位图,Colorblk2,因此可以直接使用;第二个是一个图标,使用前必须调用ToBitmap()方法将它转换为位图。
注意,代码需要从“资源”中请求图像,因此必须通过“添加资源”将图像添加到资源窗口。
当装载功能区时执行任务
使用Visual Studio创建的默认项目包括OnLoad()方法,当Office装载功能区时自动执行该方法。onLoad属性决定初始化时Office调用的方法,可以修改方法以满足需要,默认的方法名为onLoad()。本例中相应的回调代码为:
Public Sub Ribbon_Load(ByVal ribbonUI As Office.IRibbonUI)
'保存Ribbon引用
Me.ribbon = ribbonUI
'初始化下划线状态
UnderlineState = False
'显示装载消息
MessageBox.Show("功能区装载")
End Sub
本例提供了一个以某种方式工作的控件示例,该控件取决于用户对另一个控件的选择。本例中,用户能够控制是否应用程序允许下划线功能。因为Excel需要确定在Ribbon装载时该控件的状态,所以代码包含了一个名为UnderlineState的初始化变量。
在调试时,在代码中包括状态信息是有帮助的。这里,只是简单地告诉功能区已经装载。如果没有看到这个消息框,则表明加载项出现了错误。
创建新的选项卡、组和控件
最经常执行的任务之一是为应用程序创建新的选项卡、组和控件。为达到此目的,开始仍然需要添加XML。本例中,添加的XML代码如下:
<tabid="myTab"
label="我的选项卡">
<groupid="MyGroup"
label="我的组">
<buttonid="myButton"
label="我的按钮"
image="Colorblk2"
size="large"
onAction="MyButton_ClickHandler"/>
</group>
</tab>
创建了一个名为“我的选项卡”的选项卡,包含一个名为“我的组”的组,其中含有一个名为“我的按钮”的按钮。使用了自定义图像,因此在image属性中添加了相应的信息。当用户单击“我的按钮”时,调用myButton_ClickHandler()方法:
Public Sub myButton_ClickHandler(ByVal Control As Office.IRibbonControl)
' 显示一条简单的消息
MessageBox.Show("我的按钮被单击")
End Sub
修改或重利用已有的选项卡、组和控件
有时,希望修改或重利用已有的选项卡、组或控件,而不是创建新的。例如,可能想改变“格式刷”的功能,满足内在的格式需求,或者完全隐藏某些选项卡、组或控件。
下面的XML代码在“开始”选项卡中添加一个控件:
<tabidMso="TabHome">
<groupid="BehaviorChange"
label="操作"
insertAfterMso="GroupFont">
<toggleButtonid="StopUnderline"
label="中止下划线功能"
onAction="StopUnderline_ClickHandler"
getPressed="StopUnderline_GetPressed"
size="large"
imageMso="ShapeFillColorPicker"
insertBeforeMso="UnderlineGallery"/>
</group>
</tab>
在修改Office已有的元素时,使用idMso属性。新创建的“操作”组使用insertAfterMso属性指定该组在“开始”选项卡中的位置。
本例中,toggleButton控件除了需要通常的onAction属性外,还需要getPressed属性来获取按钮的状态。这两个属性对应的回调代码为:
Public Sub StopUnderline_ClickHandler(ByVal Control As Office.IRibbonControl, ByVal Pressed As Boolean)
' 存储当前按钮的状态
UnderlineState = Pressed
' 在屏幕上显示正确的状态
ribbon.InvalidateControl(Control.Id)
End Sub
Public Function StopUnderline_GetPressed(ByVal Control As Office.IRibbonControl) As Boolean
' 返回当前的按下状态
Return UnderlineState
End Function
重利用现有的控件的处理过程与修改现有的控件不同。本例中,必须添加command元素:
<commands>
<commandidMso="Underline"
onAction="myUnderline"/>
<commandidMso="FileSaveAsExcel97_2003"
onAction="FileSaveAs_ClickHandler"/>
</commands>
本示例重利用了两个控件:“开始”选项卡中的“下划线”按钮,以及“Office菜单”中“另存为”菜单的“Excel 97-2003工作簿”项目。本示例重载onAction属性,这是最常执行的重载。然而,应该看看其它需要的回调,例如处理切换按钮时的getPressed。
Public Sub myUnderline(ByVal Control As Office.IRibbonControl, ByVal Pressed As Boolean, ByRef CancelDefault As Boolean)
' 检查下划线控件的状态
If (UnderlineState) Then
' 显示错误消息
MessageBox.Show("没有允许操作的下划线")
' 设置控件使之不能被按下
Pressed = False
' 在屏幕上显示正确的状态
ribbon.InvalidateControl(Control.Id)
' 告诉Office不要执行默认的操作
CancelDefault = True
Else
' 否则,告诉Office执行默认的操作
CancelDefault = False
End If
End Sub
Public Sub FileSaveAs_ClickHandler(ByVal Control As Office.IRibbonControl, ByRef CancelDefault As Boolean)
' 包含用户的响应
Dim Response As DialogResult
' 要求用户保存文件
Response = _
MessageBox.Show("保存为老版本. 确定吗?", _
"老文件版本警告", _
MessageBoxButtons.YesNo)
' 检查响应
If Response = DialogResult.Yes Then
CancelDefault = False
Else
CancelDefault = True
End If
End Sub
myUnderline()方法控制“下划线”控件是否按正常状态工作,还是基于用户是否按下“中止下划线功能”按钮而提供其它功能。正常状态工作时,该方法简单地设置CancelDefault为false,告诉Office执行缺省的操作。
此外,当用户按下“中止下划线功能”按钮时,该方法显示一条消息,说明下划线控件不工作了。然后设置Pressed为false,意味着下划线控件不会显示像它正常状态下按下时的操作。接着,重设控件为期望的设置。最后,设置CancelDefault为true。
修改或重利用Office菜单
Office菜单包含许多配置和文件项,不直接与具体操作相关。当希望创建与具体操作无关的项目时,将其添加到OfficeMenu项中。
<officeMenu>
<menuidMso="FilePrepareMenu">
<buttonid="NewPrepButton"
label="我的准备按钮"
description="Prepare Time"
image="TIME"
insertBeforeMso="FileProperties"
onAction="NewPrepButton_ClickHandler"/>
</menu>
<splitButtonidMso="FileSaveAsMenu">
<menuidMso="FileSaveAsMenu">
<buttonid="SayHello"
label="问好"
description="This button says hello!"
image="Colorblk2"
onAction="SayHello_ClickHandler"/>
</menu>
</splitButton>
</officeMenu>
上述代码演示了如何处理不同的控件,例如本例中的菜单和拆分按钮。相应的回调代码如下:
Public Sub NewPrepButton_ClickHandler(ByVal Control As Office.IRibbonControl)
' 显示一条简单的消息
MessageBox.Show("准备好了吗")
End Sub
Public Sub SayHello_ClickHandler(ByVal Control As Office.IRibbonControl)
' 显示一条简单的消息
MessageBox.Show("Hello")
End Sub
使用startFromScratch模式创建功能区
要从头开始创建功能区,只需在ribbon元素中使用startFromScratch属性:
<ribbonstartFromScratch="true">